我有一个带标记器的字段,它按点分割。在搜索时,下面的值aaa.bbb
将被拆分为两个项aaa
和bbb
。
我的问题是如何写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查询可能也是一个不错的选择。(详见所提供的链接)