我有一个Elasticsearch索引,其中一个字段标有not_analyzed。此字段包含以空格分隔的值列表,如下所示:
Value1 Value2 Value3
现在我想执行搜索以查找此字段包含“Value2”的文档。我已经测试过使用文本短语前缀进行搜索,但搜索“Value2”时没有任何匹配。另一方面,搜索“Value1”或“Value1 Value2”匹配。我不想在搜索中有任何模糊性,只需要完全匹配(这就是字段设置为not_analyzed的原因)。
有没有办法像这样进行搜索?
根据我对Elasticsearch的有限理解,我猜我需要使用空白分析器设置字段进行分析。是吗?
答案 0 :(得分:1)
正确,使用Standard
或Whitespace
分析器等可以将单词分解成块,用空格,逗号等分开。simple_query_string查询将匹配“Value2”无论其在文件领域的地位如何。
标准分析器还会对您的字段进行小写,这意味着只有小写的搜索字词才会匹配。
答案 1 :(得分:0)
您可以使用通配符执行此操作,尽管这将是一个昂贵的查询。 您可能必须将“ lowercase_expanded_terms”设置为false才能匹配。
当您搜索“ Value2”并使用通配符时,lucene解析后,搜索将被解释为“ value2”。
query_string:Value2 *-> ES解释值2 *
请注意,它会小写搜索,这对于分析字段很有用,但是在not_analyzed字段中,您将没有匹配项(如果原始值是大写的话)
lowercase_expanded_terms阻止了这种情况的发生
现在按照您所说的,以下查询应与您的文档相符,是否未对字段进行分析?
{
"size": 10,
"query": {
"query_string": {
"query": "title:*Value2*"
}
}
}
对不起,答案很糟糕。