我正在使用弹性搜索来索引包含两个字段的实体:机构名称和机构地址。
假设我已经索引了一个实体:
{
"agencyName": "Turismo Viajes",
"agencyAddress": "Av. Maipú 500"
}
我希望能够搜索此实体并通过机构名称搜索上面的实体。不同的搜索可能是:
1) urismo 2) Viaje 3) Viajes 4) Turismo 5) uris
这个想法是,如果我用这些字符串进行查询,我应该总是得到那个实体(可能有不同的分数,具体取决于它的准确程度)。
为此,我认为 nGram 可以解决问题,因此我在我的弹性 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"
}
}
问题是在拨打这样的电话时:
curl -XPOST 'http://localhost:9200/possible_clients/possible_client/_search' -d '{
"query": { "term": { "agencyName": "uris" }}
}'
我没有受到任何打击。任何想法我做错了什么?
提前致谢。