Elasticsearch:搜索同一句话中的两个单词

问题描述 投票:0回答:1

我有一个保存文章的索引。文章索引有摘要和内容字段。我为摘要和内容映射设置了

text
类型。 我想搜索摘要或内容字段中同一个句子中出现的两个单词。而且我还必须检查他们之间的脏话。

GET articles/_mapping

输出:

{
  "articles": {
    "mappings": {
      "properties": {
        "abstract": {
          "type": "text",
        },
        "content {
          "type": "text",
        }
      }
    }
  }
}

我知道我可以使用

span_near
在每个字段中进行搜索,但是我如何使用
span_near
来搜索同一个句子中出现的两个单词?

elasticsearch
1个回答
0
投票

这是使用

span_near

的语法
GET /articles/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "span_near": {
            "clauses": [
              {
                "span_term": {
                  "abstract": "word1"
                }
              },
              {
                "span_term": {
                  "abstract": "word2"
                }
              }
            ],
            "slop": 0,  
            "in_order": true
          }
        },
        {
          "span_near": {
            "clauses": [
              {
                "span_term": {
                  "content": "word1"
                }
              },
              {
                "span_term": {
                  "content": "word2"
                }
              }
            ],
            "slop": 0,   
            "in_order": true
          }
        }
      ]
    }
  }
}

注意:根据需要调整斜率值

  • slop
    :这定义了匹配术语之间允许的插入不匹配位置(单词)的最大数量。
    slop
    0
    表示单词必须直接相邻出现。

  • in_order
    - 当设置为
    true
    时,要求单词按指定顺序出现(即
    word1
    必须出现在
    word2
    之前)。如果您不关心顺序,请将其设置为
    false

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-near-query.html

© www.soinside.com 2019 - 2024. All rights reserved.