我正在学习使用elastisearch作为数据库查询的替代方法,我无法对构建的索引执行子串匹配。 我用来创建索引的映射是
"mappings" : {
"user" : {
"properties" : {
"name" : {"type": "string"},
"specialty" : {"type": "string" ,"analyzer":"snowball"},
"address : {"type": "string" ,"analyzer":"snowball"}
}
}
}
我正在编制索引的文件是
{
"name" : "John Doe",
"speciality": ["pediatrician","Child Doctor"],
"address": ["#123 park road Abbeyville","#423 park road AbbeyTown" ]
}
当我执行像
这样的搜索时curl -XGET localhost:9200/test/user/_search?q=speciality:pediatrician
我得到了正确的文件
然而,当我搜索
这样的字符串时curl -XGET localhost:9200/test/user/_search?q=speciality:pedia
curl -XGET localhost:9200/test/user/_search?q=speciality:pediatricians
未检索到任何结果
P.S我知道外卡可用于匹配,但我需要能够根据用户输入搜索整个单词和部分单词,以便返回最相关的文档。
答案 0 :(得分:0)
您是否在更改映射后尝试重新编制索引?同时尝试将搜索分析器设置为在设置中滚雪球。
<强>更新强>
您可以进行外卡搜索。最好单独追踪外卡搜索,而不是前导和尾随外卡搜索。
curl -XGET localhost:9200/test/user/_search?q=speciality:pedia*
curl -XGET localhost:9200/test/user/_search?q=speciality:pediatricians*