【问题标题】:ElasticSearch bool query with slop, how to achieve?ElasticSearch bool查询带slop,如何实现?
【发布时间】:2018-05-16 19:09:52
【问题描述】:

我有一个查询,我需要找到 N 个单词,并且文档还必须匹配正则表达式字符串。我有这个工作,但我也要求这些术语必须在 3 个单词内,在 Elastic 语法 slop:3 中。问题是 bool 查询中不允许使用 slop。

{
  "from": 0,
  "size": 100,
  "explain": true,
  "_source": {
    "includes": [
      "*"
    ],
    "excludes": [
      "doctext"
    ]
  },
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "doctext": {
              "query": "value1 value2"
            }
          }
        },
        {
          "regexp": {
            "doctext": {
              "value": "[0-9]{3}"
            }
          }
        }
      ]
    }
  }
}

有没有人知道实现相同结果的另一种方法?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    match 查询替换为match_phrase 并在其中添加slop,例如

    {
      "from": 0,
      "size": 100,
      "explain": true,
      "_source": {
        "excludes": [
          "doctext"
        ]
      },
      "query": {
        "bool": {
          "must": [
            {
              "match_phrase": {
                "doctext": {
                  "query": "value1 value2",
                  "slop": 3
                }
              }
            },
            {
              "regexp": {
                "doctext": {
                  "value": "[0-9]{3}"
                }
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

    • 感谢您的帮助。这很接近,但 slop 值仅适用于“match_phrase”值,而不适用于 regexp 值。我正在尝试在两组搜索条件中使用 slop。
    • @KevinTracey 正则表达式查询不接受 slop 参数
    • 感谢 Elastic 留言板上的两张海报的帮助,我能够解决这个问题。使用 span_near 我们能够开始工作:discuss.elastic.co/t/…
    • 跨度查询是解决术语邻近查询的好工具
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2016-08-19
    • 2015-04-29
    相关资源
    最近更新 更多