Elasticsearch完成建议器匹配多个输入

时间:2015-11-04 09:22:06

标签: elasticsearch autocomplete search-suggestion

我有ES完成建议的问题。我有以下索引映射:

curl -XPUT localhost:9200/test_index/ -d '{
   "mappings": {
      "item": {
         "properties": {
            "test_suggest": {
               "type": "completion",
               "index_analyzer": "whitespace",
               "search_analyzer": "whitespace",
               "payloads": false
            }
         }
      }
   }
}'

我为某些名字编制索引:

curl -X PUT 'localhost:9200/test_index/item/1?refresh=true' -d '{
    "suggest" : {
        "input": [ "John", "Smith" ],
        "output": "John Smith",        
        "weight" : 34
    }
}'

curl -X PUT 'localhost:9200/test_index/item/2?refresh=true' -d '{
    "suggest" : {
        "input": [ "John", "Doe" ],
        "output": "John Doe",        
        "weight" : 34
    }
}'

现在,如果我调用建议并仅提供名字John,那么它可以正常工作:

curl -XPOST localhost:9200/test_index/_suggest -d '{
    "test_suggest":{
        "text":"john",
        "completion": {
            "field" : "test_suggest"
        }
    }
}'

姓氏同样适用:

curl -XPOST localhost:9200/test_index/_suggest -d '{
        "test_suggest":{
            "text":"doe",
            "completion": {
                "field" : "test_suggest"
            }
        }
    }'

即使搜索姓氏或名字的部分也可以正常工作:

curl -XPOST localhost:9200/test_index/_suggest -d '{
        "test_suggest":{
            "text":"sm",
            "completion": {
                "field" : "test_suggest"
            }
        }
    }'

然而,当我尝试搜索包含部分或全部第二个单词(姓氏)的内容时,我没有得到任何建议,下面的调用都没有工作:

curl -XPOST localhost:9200/test_index/_suggest -d '{
        "test_suggest":{
            "text":"john d",
            "completion": {
                "field" : "test_suggest"
            }
        }
    }'


   curl -XPOST localhost:9200/test_index/_suggest -d '{
            "test_suggest":{
                "text":"john doe",
                "completion": {
                    "field" : "test_suggest"
                }
            }
        }'



curl -XPOST localhost:9200/test_index/_suggest -d '{
            "test_suggest":{
                "text":"john smith",
                "completion": {
                    "field" : "test_suggest"
                }
            }
        }'

我想知道如何在不输入单个文本字段的情况下实现这样的事情,因为我希望在完成时匹配第一个和/或最后一个名称。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,然后我使用了像

这样的东西
curl -XPOST localhost:9200/test_index/_suggest -d '{
            "test_suggest":{
                "text":["john", "smith"],
                "completion": {
                    "field" : "test_suggest"
                }
            }
        }'

答案 1 :(得分:0)

你应该这样做:

curl -X PUT 'localhost:9200/test_index/item/1?refresh=true' -d '{
    "suggest" : {
        "input": [ "John", "Smith", "John Smith" ],
        "output": "John Smith",        
        "weight" : 34
    }
}'

即。将所有想要的术语组合添加到输入中。