我使用 Oracle river-jdbc 创建的 Elasticsearch 缓存中有 2 个字段。
第一列为数字,第二列为字符串name
。
我想在使用 jQuery 的自动完成文本框中使用这个索引。
所有实施都是针对该name
领域完成的。
用户可以提供任何字符串(至少 3 个字符),然后使用给定的字符串进入 Elasticsearch 并搜索数据,因为它是name
字段的“In-String”部分并返回结果。LIKE
与使用字段运算符在 SQL 中查询类似name
,它正在工作并且数据被加载到 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 考虑的排序标记通常是公司名称中的一个词。