【发布时间】:2013-07-19 13:59:38
【问题描述】:
我在使用 Oracle river-jdbc 创建的 Elasticsearch 缓存中有 2 个字段。
第一列是数字,第二列是字符串 name。
我想在使用 jQuery 的自动完成文本框中使用此索引。
所有实现都针对name 字段完成。
用户可以提供任何字符串(至少 3 个字符),然后使用给定的字符串进入 Elasticsearch 并搜索数据,因为它是 name 字段的“In-String”部分并返回结果。与使用name 字段的LIKE 运算符在SQL 中查询类似,它正在工作并且数据已加载到UI 中。
我想对数值字段做同样的事情,但除非我给出数值字段的完整值,否则 Elasticsearch 不会返回任何数据。所以自动完成不适用于数字字段。
下面是代码:
创建河流域为:
{
"type": "jdbc",
"jdbc": {
"driver": "oracle.jdbc.driver.OracleDriver",
"url": "jdbc:oracle:thin:@//<ip-addr>:1521/db",
"user": "user",
"password": "pwd",
"sql": "select curr_duns_number as duns, TRIM(name) as company from subject where rownum < 10000"
},
"index": {
"index": "subject",
"type": "name"
},
"properties": {
"duns": {"type": "string", "store": "yes"},
"company": {"type": "string"}
}
}
获取公司字段:
POST http://<ip-addr>:9200/subject/name/_search
{
"from": 0,
"size": 10,
"query": {
"wildcard": {
"COMPANY": "boo*"
}
},
"sort": [
{
"COMPANY": {"order": "asc"}
}
]
}
在尝试了wildcard、matching 和query_string 等各种组合后,它并没有给我结果,我遇到了以下问题:
- 我无法以与使用 SQL 类似的方式查询数字字段,例如
select * from subject where curr_duns_number like '%123%'; - 排序顺序未正确应用,因为用于排序 Elasticsearch 考虑的标记通常是公司名称中的一个词。
【问题讨论】:
-
你知道这是区分大小写的吗?因此,您应该搜索“公司”,而不是搜索“公司”。顺便说一下排序。另见When is case sensitivity important in JSON requests to ASP.NET web services (ASMX)?
标签: elasticsearch search numbers field sql-like