Elasticsearch“simple_query_string”与“query_string”字段分析错误?

时间:2015-12-28 19:06:29

标签: elasticsearch

最近我们发现,由于我们在进入系统时没有对搜索词进行消毒,因此当使用/(正斜杠)等特殊字符时,我们会在Elasticsearch中偶尔获得解析异常w /“query_string ”。所以,我们决定切换到“simple_query_string”。但是,我们发现每个都没有使用相同的分析仪。我查看了When Analyzers Are Used,看它是否表明简单查询字符串和常规查询字符串之间存在差异但是没有,所以我想知道这是不是一个错误。例如:

"query_string": { "query": "sales", "fields": [ "title" ] }

将使用分析器作为“标题”字段,这是我们的“en_analyzer”(参见下面的定义)并正确地将“销售”限制为“销售”并找到匹配的文档。只需将“query_string”更改为“simple_query_string”就不会。我们必须搜索“sale”或在查询中添加分析器,如下所示:

"simple_query_string": { "query": "sales", "fields": [ "title" ], "analyzer": "en_analyzer" }

当然,并非所有字段都以相同的方式进行分析,因此我在上面引用的文档中描述的默认行为非常有意义,这就是我们想要的。这是一个错误还是“simple_query_string”在查询过程中对字段分析的行为方式不一样?我们正在使用ES 1.7.2。

我们对“en_analyzer”定义的相关部分是:

"en_analyzer": { "type": "custom", "tokenizer": "icu_tokenizer", "filter": [ "icu_normalizer", "en_stop_filter", "en_stem_filter", "icu_folding", "shingle_filter" ], "char_filter": [ "html_strip" ] }

使用:

"en_stop_filter": { "type": "stop", "stopwords": [ "_english_" ] }, "en_stem_filter": { "type": "stemmer", "name": "minimal_english" }

Link to my same question on Github ... though I edited this one better after I asked on Github first. So far no response there.

1 个答案:

答案 0 :(得分:2)

在1.7.2中,simple_query_string将在未指定时使用默认的标准分析器,并且不会使用在被搜索字段上定义的任何搜索分析器。当文件没有说明时,人们应该转向最终的知识来源,即源代码。在SimpleQueryStringParser.java中,class comment州:

  

analyzer:分析器用于分析令牌以确定它们应转换成哪种查询,默认为“标准”

在同一个班级中有点further down,我们可以阅读:

  

默认情况下使用标准分析器

在ES 2.x版本中,这种行为没有改变。从SimpleQueryStringBuilder.java的源代码中可以看出,如果查询中未指定分析器,则使用标准分析器。

从上面链接的来源引用评论:

  

如果没有指定

,则默认使用标准分析器

所以回答你的问题,这不是一个错误,而是预期的行为。