Lew*_*ond 9 autocomplete elasticsearch
我看过这篇文章:https://www.elastic.co/blog/you-complete-me 但是,它需要在客户端编写一些逻辑来创建多个"输入".有没有办法定义一个分析器(可能使用shingle或ngram/edge-ngram)来生成多个输入项?
这是我尝试过的(显然不起作用):
DELETE /products/
PUT /products/
{
"settings": {
"analysis": {
"filter": {
"autocomplete_filter": {
"type":"shingle",
"max_shingle_size":5,
"min_shingle_size":2
}
},
"analyzer": {
"autocomplete": {
"filter": [
"lowercase",
"autocomplete_filter"
],
"tokenizer": "standard"
}
}
}
},
"mappings": {
"product": {
"properties": {
"name": {"type": "string"
,"copy_to": ["name_suggest"]
}
,"name_suggest": {
"type": "completion",
"payloads": false,
"analyzer": "autocomplete"
}
}
}
}
}
PUT /products/product/1
{
"name": "Apple iPhone 5"
}
PUT /products/product/2
{
"name": "iPhone 4 16GB"
}
PUT /products/product/3
{
"name": "iPhone 3 GS 16GB black"
}
PUT /products/product/4
{
"name": "Apple iPhone 4 S 16 GB white"
}
PUT /products/product/5
{
"name": "Apple iPhone case"
}
POST /products/_suggest
{
"suggestions": {
"text":"i"
,"completion":{
"field": "name_suggest"
}
}
}
Run Code Online (Sandbox Code Playgroud)
不要认为有直接的方法可以实现这一目标。我不确定为什么需要存储 ngrammed 标记,考虑到 elasticsearch 已经将“输入”文本存储为 FST 结构。新版本还允许建议查询中的模糊性。 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html#fuzzy
我可以理解需要像木瓦分析器这样的东西来为您生成输入,但似乎还没有办法。话虽如此,_analyze端点可用于从您选择的分析器生成令牌,并且这些令牌可以传递到“输入”字段(有或没有任何其他添加的逻辑)。这样您就不必在应用程序代码中复制分析器逻辑。这是我能想到的实现所需输入字段的唯一方法。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |