我对此进行了很多搜索并尝试了多种组合。但在所有尝试中都失败了:(。
这是我的问题:我在弹性搜索中创建了一个 jdbc-river,如下所示:
{
"type" : "jdbc",
"jdbc" : {
"driver" : "oracle.jdbc.driver.OracleDriver",
"url" : "jdbc:oracle:thin:@//ip:1521/db",
"user" : "user",
"password" : "pwd",
"sql" : "select f1, f2, f3 from table"
},
"index" : {
"index" : "subject2",
"type" : "name2",
"settings": {
"analysis": {
"analyzer": {
"my_analizer": {
"type": "custom",
"tokenizer": "my_pattern_tokenizer",
"filter": []
}
},
"tokenizer": {
"my_pattern_tokenizer": {
"type": "pattern",
"pattern": "$^"
}
},
"filter": []
}
}
},
"mappings":
{
"subject2":
{
"properties" : {
"f1" : {"index" : "not_analyzed", "store": "yes", "analyzer": "my_analizer", "search_analyzer": "keyword", "type": "string"},
"f2" : {"index" : "not_analyzed", "store": "yes", "analyzer": "my_analizer", "search_analyzer": "keyword", "type": "string"},
"f3" : {"index" : "not_analyzed", "store": "yes", "analyzer": "my_analizer", "search_analyzer": "keyword", "type": "string"}
}
}
}
}
我想实现一个自动完成功能,将用户输入的值与“f1”字段中的数据相匹配,但从一开始就是这样。
f1 字段中的数据就像
- “哈丁县ABC”
- “XYZ国”
- “布拉布拉郡”
- “布拉第二县”
根据要求,当用户键入“Coun”时,弹性搜索应该返回第二、第三和第四个结果,而不是第一个。我读到了“关键字”分析器,它使完整的单词成为标记,但我不知道在这种情况下不工作。
此外,如果用户键入“B 县”,则弹性搜索应返回第 3 和第 4 个选项。
以下是我查询结果的格式。选项1
{"from":0,"size":10, "query":{ "field" : { "f1" : "count*" } } }
选项 2
{"from":0,"size":10, "query":{ "span_first" : {
"match" : {
"span_term" : { "COMPANY" : "hardin" }
},
"end" : 1
} } }
请告诉我我在这里做错了什么?提前致谢。