【发布时间】:2021-05-20 02:10:27
【问题描述】:
我有一个带有分词器的字段,它按点分割。
在搜索时,以下值 aaa.bbb 将拆分为两个词 aaa 和 bbb。
我的问题是如何编写在同一术语上包含多个条件的布尔查询?
例如,我想获取其字段包含与 gmail 的模糊搜索匹配的术语但同一术语不得包含 gamil 的所有文档。
以下是我想要实现的一些示例:
-
bmail// MATCH:因为它匹配模糊搜索而不是gamil -
gamil.bmail// MATCH:因为术语bmail匹配模糊搜索而不是gamil -
gamil// 不匹配:因为它匹配模糊搜索,但等于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"
}
}
]
}
}
]
}
}
},
}
【问题讨论】:
-
您在这里尝试过答案吗? stackoverflow.com/questions/28614805/…
-
@D.C 你能分享一些示例索引数据和预期的搜索结果吗?
-
@D.C 您可以使用令牌过滤器删除不应匹配的术语吗? elastic.co/guide/en/elasticsearch/reference/current/…
-
@RonSerruya 如果我理解正确,建议将两个字段加入
nested一个,在我的情况下,我只有一个字段被标记为多个令牌 -
@ESCoder 你能说得更具体点吗?我不确定还缺少什么,我发布了一个查询示例并在问题中提供了预期结果
标签: elasticsearch