Autocomplete Elasticsearch通过令牌自动完成或自动建议
我想就如何基于标记完成一个术语提出建议,类似于谷歌的自动完成,但只使用一个标记或单词 我想搜索将标记化的文件名。例如,“BRAND_Connect_A1233.jpg”被标记为“BRAND”、“Connect”、“a1234”和“jpg” 现在我想问一些建议,例如“Con”。 建议应提供完整的匹配标记,而不是完整的文件名:Autocomplete Elasticsearch通过令牌自动完成或自动建议,autocomplete,elasticsearch,autosuggest,search-suggestion,Autocomplete,elasticsearch,Autosuggest,Search Suggestion,我想就如何基于标记完成一个术语提出建议,类似于谷歌的自动完成,但只使用一个标记或单词 我想搜索将标记化的文件名。例如,“BRAND_Connect_A1233.jpg”被标记为“BRAND”、“Connect”、“a1234”和“jpg” 现在我想问一些建议,例如“Con”。 建议应提供完整的匹配标记,而不是完整的文件名: 连接 轮廓 概念 “A12”的建议应为“A1234”、“A1233”、“A1233” 例子 使用查询、方面和过滤器可以很好地工作 首先,我创建了一个映射,包括一个标记器
- 连接
- 轮廓
- 概念
curl-XGET'localhost:9200/files/\u analyze?pretty=1&text=BRAND\u ConnectBlue\u A1234.jpg&analyzer=filename\u search'
curl-XGET'localhost:9200/files/\u analyze?pretty=1&text=BRAND\u ConnectBlue\u A1234.jpg&analyzer=filename\u index'
现在我添加了一些示例数据
curl-X POST“localhost:9200/files/file”-d'{“filename”:“BRAND_ConnectBlue_A1234.jpg”}
curl-X POST“localhost:9200/files/file”-d'{“filename”:“BRAND_Connect_A1233.jpg”}
curl-X POST“localhost:9200/files/file”-d'{“filename”:“BRAND_ConceptSpace_A1244.jpg”}”
curl-X POST“localhost:9200/files/file”-d'{“filename”:“COMPANY_Connect_A1222.jpg”}”
curl-X POST“localhost:9200/files/file”-d'{“filename”:“COMPANY_Concept_A1233.jpg”}”
curl-X POST“localhost:9200/files/file”-d'{“filename”:“DEALER_Connect_B1234_uu.jpg”}
curl-X POST“localhost:9200/files/file”-d'{“filename”:“DEALER\u Contour21\u B1233.jpg”}
curl-X POST“localhost:9200/files/file”-d'{“filename”:“DEALER_ConceptCube_B2233.jpg”}
curl-X POST“localhost:9200/files/\u刷新”
获得所需建议的各种方法并不能带来预期的结果。我试图命名分析器,并尝试了分析器和通配符的各种组合
curl-XGET'localhost:9200/files/\u suggest?pretty=true'-d'{
“文本”:“con”,
“简单短语”:{
“短语”:{
“字段”:“文件名”,
“尺寸”:15,
“真实单词错误可能性”:0.75,
“最大误差”:0.1,
“克大小”:3
}
}
}'
curl-XGET'localhost:9200/files/\u suggest?pretty=true'-d'{
“我的建议”:{
“文本”:“con”,
“期限”:{
“字段”:“文件名”,
“分析器”:“文件名\索引”
}
}
}'
您需要添加一个特殊映射来使用完成建议器,如文档所示。我已经修改了你的例子来说明它是如何工作的
首先创建索引。请注意文件名\u建议的映射
curl -XPUT 'localhost:9200/files/?pretty=1' -d '
{
"settings" : {
"analysis" : {
"analyzer" : {
"filename_search" : {
"tokenizer" : "filename",
"filter" : ["lowercase"]
},
"filename_index" : {
"tokenizer" : "filename",
"filter" : ["lowercase","edge_ngram"]
}
},
"tokenizer" : {
"filename" : {
"pattern" : "[^[;_\\.\\/]\\d]+",
"type" : "pattern"
}
},
"filter" : {
"edge_ngram" : {
"side" : "front",
"max_gram" : 20,
"min_gram" : 2,
"type" : "edgeNGram"
}
}
}
},
"mappings" : {
"file" : {
"properties" : {
"filename" : {
"type" : "string",
"analyzer": "filename_index",
"search_analyzer" : "filename_search"
},
"filename_suggest": {
"type": "completion",
"analyzer": "simple",
"search_analyzer": "simple",
"payloads": true
}
}
}
}
}'
添加一些数据。请注意filename\u suggest
如何具有输入
字段,其中包含要匹配的关键字
curl -X POST "localhost:9200/files/file" -d '{ "filename" : "BRAND_ConnectBlue_A1234.jpg", "filename_suggest": { "input": ["BRAND", "ConnectBlue", "A1234", "jpg"], "payload": {} } }'
curl -X POST "localhost:9200/files/file" -d '{ "filename" : "BRAND_Connect_A1233.jpg", "filename_suggest": { "input": ["BRAND", "Connect", "A1233", "jpg"], "payload": {} } }'
curl -X POST "localhost:9200/files/file" -d '{ "filename" : "BRAND_ConceptSpace_A1244.jpg", "filename_suggest": { "input": ["BRAND", "ConceptSpace", "A1244", "jpg"], "payload": {} } }'
curl -X POST "localhost:9200/files/file" -d '{ "filename" : "COMPANY_Connect_A1222.jpg", "filename_suggest": { "input": ["COMPANY", "Connect", "A1222", "jpg"], "payload": {} } }'
curl -X POST "localhost:9200/files/file" -d '{ "filename" : "COMPANY_Concept_A1233.jpg", "filename_suggest": { "input": ["COMPANY", "Concept", "A1233", "jpg"], "payload": {} } }'
curl -X POST "localhost:9200/files/file" -d '{ "filename" : "DEALER_Connect_B1234_.jpg", "filename_suggest": { "input": ["DEALER", "Connect", "B1234", "jpg"], "payload": {} } }'
curl -X POST "localhost:9200/files/file" -d '{ "filename" : "DEALER_Contour21_B1233.jpg", "filename_suggest": { "input": ["DEALER", "Contour21", "B1233", "jpg"], "payload": {} }}'
curl -X POST "localhost:9200/files/file" -d '{ "filename" : "DEALER_ConceptCube_B2233.jpg", "filename_suggest": { "input": ["DEALER", "ConceptCube", "B2233", "jpg"], "payload": {} }}'
curl -X POST "localhost:9200/files/_refresh"
现在执行查询:
curl -XPOST 'localhost:9200/files/_suggest?pretty=true' -d '{
"filename_suggest" : {
"text" : "con",
"completion": {
"field": "filename_suggest", "size": 10
}
}
}'
结果:
{
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"filename_suggest" : [ {
"text" : "con",
"offset" : 0,
"length" : 3,
"options" : [ {
"text" : "Connect",
"score" : 2.0,
"payload":{}
}, {
"text" : "Concept",
"score" : 1.0,
"payload":{}
}, {
"text" : "ConceptSpace",
"score" : 1.0,
"payload":{}
}, {
"text" : "ConnectBlue",
"score" : 1.0,
"payload":{}
}, {
"text" : "Contour21",
"score" : 1.0,
"payload":{}
} ]
} ]
}
{
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"filename_suggest" : [ {
"text" : "con",
"offset" : 0,
"length" : 3,
"options" : [ {
"text" : "Connect",
"score" : 2.0,
"payload":{}
}, {
"text" : "Concept",
"score" : 1.0,
"payload":{}
}, {
"text" : "ConceptSpace",
"score" : 1.0,
"payload":{}
}, {
"text" : "ConnectBlue",
"score" : 1.0,
"payload":{}
}, {
"text" : "Contour21",
"score" : 1.0,
"payload":{}
} ]
} ]
}