Elasticsearch:匹配查询如何工作?

时间:2014-07-17 20:52:40

标签: elasticsearch

我是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"在该领域的根词?

谢谢和问候。

1 个答案:

答案 0 :(得分:4)

你的问题是你正在使用Elasticsearch中的默认分析器,它不会阻止(例如将话语分解为词干,例如"安静"来自"更安静"或"最安静"。)

如果你想要阻止,那么最直接的事情就是使用Snowball分析仪。请注意,您需要使用此分析器进行索引和查询,否则您不会在词干上匹配。

  

雪球分析仪

     

使用标准标记器的类型雪球分析器   标准过滤器,小写过滤器,停止过滤器和雪球过滤器。

     

雪球分析仪是Lucene的干扰分析仪   最初是基于snowball.tartarus.org的雪球项目。

     

样本用法:

{
    "index" : {
        "analysis" : {
            "analyzer" : {
                "my_analyzer" : {
                    "type" : "snowball",
                    "language" : "English"
                }
            }
        }
    }
}

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-snowball-analyzer.html