elasticsearch - Elasticsearch:如何编写在同一令牌上包含多个条件的布尔查询?
问题描述
我有一个带有分词器的字段,它按点拆分。在搜索时,以下值 aaa.bbb
将被拆分为两个术语aaa
和bbb
。
我的问题是如何编写在同一术语上包含多个条件的布尔查询?
例如,我想获取其字段包含与模糊搜索匹配的术语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,然后通过返回的高亮对象以编程方式过滤结果。
如果您不需要正则表达式或者您可以确保不超过布尔查询限制,跨度查询也可能是一个不错的选择。(在提供的链接中查看更多详细信息)
推荐阅读
- azure - 还原加入域的加密虚拟机
- android - 具有单一事实来源的 Android 用例
- lisp - 列表中位置 n 的元素是什么
- django - 带有外部存储的 url.py settings.py 和 Dropbox
- python-3.x - Django - 表单未保存到 Db
- r - 选择具有多个 if 和 if else 语句的行 (R)
- javascript - 执行 php 脚本后的 JavaScript 警报窗口
- r - 使用 NA 和 R 中其他变量的值进行变异和 ifelse
- reactjs - Firebase 有反应问题
- apache-spark - Pyspark 代码改进思路(降低持续时间)