Elasticsearch逐字符地获得结果

时间:2015-09-17 11:44:55

标签: search elasticsearch

也许我没有正确阅读弹性搜索的文档,但我对如何让所有索引(如{"name": "s"})提取其中包含"s"的所有名称数据感到困惑。

然后,当用户输入更多字母时,它会保持过滤,标准的搜索方式,类似于谷歌。

我试过了

curl -XGET "http://localhost:9200/schools/_search" -d "{""query"": { ""match"": {""name"": {""query"": ""s""} } }}"

另外,在我的黑客攻击解决方案中,我尝试过使用模糊搜索和其他无法正常工作的方法。

我问我如何通过"s"获取所有记录,然后将其过滤掉序列中的下一个字母,即添加"st",然后在添加"stanf"等时过滤更多?

1 个答案:

答案 0 :(得分:1)

我认为你正在寻找这个:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html

你需要:

  • 将字段(或其子字段)索引为"type": "completion"

  • 执行_suggest查询

以下是Elasticsearch文档中的一些部分修改的代码位。

架构:

  curl -X PUT localhost:9200/music
  curl -X PUT localhost:9200/music/song/_mapping -d '{
    "song" : {
          "properties" : {
              "name" : { "type" : "string" },
              "suggest" : { "type" : "completion",
                            "index_analyzer" : "simple",
                            "search_analyzer" : "simple",
                            "payloads" : true
              }
          }
      }
  }'

文件:

curl -X PUT 'localhost:9200/music/song/1?refresh=true' -d '{
    "name" : "Firstname Lastname",
    "suggest" : [ "Firstname Lastname", 
                  "Lastname, Firstname" ]
}'

查询:

curl -X POST 'localhost:9200/music/_suggest?pretty' -d '{
    "suggestionqueryname": {
        "completion": {
            "field": "suggest"
        },
        "text": "fir"
    }
}'