我是Elasticsearch的新手,对匹配查询的工作原理感到困惑。我有这个映射:
{
"product": {
"properties": {
"condition" : { "type" : "string", "store" : "yes", "index": "analyzed"}
}
}
}
我批量导入了以下文件
{ "index": {"_index": "myindex", "_type": "product", "_id": "1"}}
{ "condition": "All Quiet on the Western Front"}
{ "index": {"_index": "myindex", "_type": "product", "_id": "2"}}
{ "condition": "All Quieter on the Western Front"}
{ "index": {"_index": "myindex", "_type": "product", "_id": "3"}}
{ "condition": "All Quietest on the Western Frontline"}
我确认所有文档都已成功加载。然后我做一个匹配查询:
{
"query" : {
"match" : {
"condition" : "quiet"
}
}
}
它只返回#1文档。我在这里很困惑。为什么不返回所有三个文件?我应该使用什么查询来返回三个文档,因为它们都有" quiet"在该领域的根词?
谢谢和问候。
答案 0 :(得分:4)
你的问题是你正在使用Elasticsearch中的默认分析器,它不会阻止(例如将话语分解为词干,例如"安静"来自"更安静"或"最安静"。)
如果你想要阻止,那么最直接的事情就是使用Snowball分析仪。请注意,您需要使用此分析器进行索引和查询,否则您不会在词干上匹配。
雪球分析仪
使用标准标记器的类型雪球分析器 标准过滤器,小写过滤器,停止过滤器和雪球过滤器。
雪球分析仪是Lucene的干扰分析仪 最初是基于snowball.tartarus.org的雪球项目。
样本用法:
{
"index" : {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"type" : "snowball",
"language" : "English"
}
}
}
}
}