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