也许我没有正确阅读弹性搜索的文档,但我对如何让所有索引(如{"name": "s"}
)提取其中包含"s"
的所有名称数据感到困惑。
然后,当用户输入更多字母时,它会保持过滤,标准的搜索方式,类似于谷歌。
我试过了
curl -XGET "http://localhost:9200/schools/_search" -d "{""query"": { ""match"": {""name"": {""query"": ""s""} } }}"
另外,在我的黑客攻击解决方案中,我尝试过使用模糊搜索和其他无法正常工作的方法。
我问我如何通过"s"
获取所有记录,然后将其过滤掉序列中的下一个字母,即添加"st"
,然后在添加"stanf"
等时过滤更多?
答案 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"
}
}'