Elasticsearch:如何写bool查询,将包含多个条件在同一令牌?



我有一个带标记器的字段,它按点分割。在搜索时,下面的值aaa.bbb将被拆分为两个项aaabbb

我的问题是如何写bool查询,将包含多个条件在同一项?

例如,我想获得所有文档,其中其字段包含一个与gmail模糊搜索匹配的术语,但也相同的术语不得包含gamil

下面是一些我想要达到的目标的例子:

  • bmail//MATCH:因为它匹配模糊搜索而不是gamil
  • gamil.bmail//MATCH:因为术语bmail匹配模糊搜索,而不是gamil
  • gamil//NO MATCH:因为它匹配模糊搜索,但等于gamil


注意:下面的查询看起来不正常,因为看起来好像一个词匹配一个条件,第二个词匹配另一个条件,它将被认为是命中。

{
...
"body": {
"query": {
"bool": {
"must": [
{
"fuzzy": {
"my_field": {
"value": "gmail",
"fuzziness": 1,
"max_expansions": 2100000000
}
}
},
{
"bool": {
"must_not": [
{
"query_string": {
"default_field": "my_field",
"query": "*gamil*",
"analyzer": "keyword"
}
}
]
}
}
]
}
}
},
}

我最终通过执行模糊(或任何其他)查询来使用Highlight,然后通过返回的Highlight对象以编程方式过滤结果。

如果您不需要正则表达式,或者您可以确保不超过布尔查询限制,span查询可能也是一个不错的选择。(详见所提供的链接)

相关内容

  • 没有找到相关文章

最新更新