我正在使用Elastic Search索引包含两个字段的实体:agencyName和agencyAddress。
假设我已经索引了一个实体:
{
"agencyName": "Turismo Viajes",
"agencyAddress": "Av. Maipú 500"
}
我希望能够搜索该实体,并在上面通过agencyName搜索该实体。不同的搜索可能是:
1)乌里斯莫
2)维亚耶
3)维亚耶斯
4)旅游
5)乌里斯
这个想法是,如果我用那些字符串查询,我应该总是得到那个实体(可能有不同的分数,这取决于它的准确性)。
为此,我认为nGram可以解决问题,因此我在我的 flex search.yml文件中定义了一个全局分析器,称为“短语”。
index:
analysis:
analyzer:
phrase:
type: custom
tokenizer: nGram
filter: [nGram, lowercase, asciifolding]
我这样创建了代理商索引:
{
"possible_clients" : {
"possible_client" : {
"properties" : {
"agencyName" : {
"type" : "string",
"analyzer" : "phrase"
},
"agencyAddress" : {
"type": "string"
}
}
问题是当进行这样的 call 时:
curl -XPOST 'http://localhost:9200/possible_clients/possible_client/_search' -d '{
"query": { "term": { "agencyName": "uris" }}
}'
我没有任何点击。有什么想法我做错了吗?
提前致谢。
最佳答案
您正在使用术语查询进行搜索。字词查询始终不会被分析。因此,更换分析仪不会有任何影响。您应该使用例如匹配查询。
关于elasticsearch - ES搜索部分词-ngram?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19038967/