elasticsearch Elasticsearch完成-使用分析器生成输入列表,elasticsearch,autocomplete,elasticsearch,Autocomplete" /> elasticsearch Elasticsearch完成-使用分析器生成输入列表,elasticsearch,autocomplete,elasticsearch,Autocomplete" />

elasticsearch Elasticsearch完成-使用分析器生成输入列表

elasticsearch Elasticsearch完成-使用分析器生成输入列表,elasticsearch,autocomplete,elasticsearch,Autocomplete,我看过这篇文章: 然而,它需要在客户端编写一些逻辑来创建多个“输入”。有没有办法定义一个分析仪(可能使用shingle或ngram/edge ngram)来生成输入的多个术语 以下是我尝试过的(显然不起作用): 不要认为有直接的方法来实现这一点。 考虑到elasticsearch已经将“输入”文本存储为FST结构,我不确定为什么需要存储ngrammed标记。新版本还允许在建议查询中使用模糊性。 我可以理解需要像木瓦分析仪这样的东西来为您生成输入,但似乎还没有办法。话虽如此,\u analyze

我看过这篇文章: 然而,它需要在客户端编写一些逻辑来创建多个“输入”。有没有办法定义一个分析仪(可能使用shingle或ngram/edge ngram)来生成输入的多个术语

以下是我尝试过的(显然不起作用):


不要认为有直接的方法来实现这一点。 考虑到elasticsearch已经将“输入”文本存储为FST结构,我不确定为什么需要存储ngrammed标记。新版本还允许在建议查询中使用模糊性。

我可以理解需要像木瓦分析仪这样的东西来为您生成输入,但似乎还没有办法。话虽如此,
\u analyze
端点可用于从您选择的分析器生成令牌,这些令牌可传递到“输入”字段(有或没有任何其他添加的逻辑)。这样,您就不必在应用程序代码中复制分析器逻辑。这是我能想到的实现所需输入字段的唯一方法


希望能有所帮助。

您好,您是否已设法以这种方式构建建议字段?当您仅使用示例数据键入“i”时,能否指定所需的输出?如果您能提供预期的输入,这将非常有帮助。@xrage我不是OP,但我希望得到所有的文档(1到5),作为建议。在我的头碰到这个问题一段时间后,我进行了一些试错实验,确定
完成
字段在没有
输入
字段的情况下可以工作,它甚至可以使用自定义分析器。。。但是,它似乎跳过了分析器的标记器部分,这使得除了关键字之外很难使用其他任何东西。最接近的事情(至少现在)是请求
\u analyze
,然后在
输入
字段中使用结果。很高兴知道!
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"
        }
    }
}