【问题标题】:Elasticsearch: Full match of query value from beginning to end of fieldElasticsearch:从字段的开头到结尾的查询值的完全匹配
【发布时间】:2019-12-24 19:30:56
【问题描述】:

我对字段值的完全匹配查询有疑问。 titlegender - 索引文档的字段

query: {
  query_string: {
    query: "box AND gender:\"women\"",
    default_field: "title"
  }
}

我使用双引号来匹配 gender 的完整查询。但是如果有 gender "men,women" 和 title 'box' 它也会出现在结果中。我知道,elasticsearch 不支持正则表达式字符 ^ 和 $ 作为字符串的开头和结尾,所以我无法制作 /^women$/

如果我想要只匹配“女性”性别而非“男性、女性”的文档,我需要做什么?

【问题讨论】:

  • 你能分享你的映射和最小的文档来重现你的用例吗?另外,您需要使用 query_string 吗?你愿意接受布尔查询吗?
  • 我会在一段时间内尝试分享信息。我试过bool->must too,bur 结果是一样的。

标签: elasticsearch pattern-matching full-text-search


【解决方案1】:

问:

如果我想要只匹配“女性”性别而不是“男性、女性”的文档,我需要做什么?

对于精确搜索,您应该使用术语查询,而不是像 query_string 这样的全文搜索查询。因此,要获取与性别完全匹配的所有文档 == 女性,您应该这样做:

GET your-index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "gender.keyword": {
              "value": "women"
            }
          }
        }
      ]
    }
  }
}

请注意,此查询假定性别字段也被映射为关键字。

要完成查询,您将添加另一个必须子句以获取标题字段 women 中具有 box 的所有文档作为性别字段的值。

GET your-index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "gender.keyword": {
              "value": "women"
            }
          }
        },
        {
          "match": {
            "title": "box"
          }
        }
      ]
    }
  }
}

【讨论】:

【解决方案2】:

谢谢apt-get_install_skill。关键字完成了工作,但添加了一些内容。

总结这是解决方案:

query: {
    bool: {
      must: {
        query_string: {
          query: "box",
          default_field: "title"
        }
      },
      filter: {
        bool: {
          should: [
            {term: {"gender.keyword": "women"}}
          ]
        }
      }
    }
 }

如果需要的话,我需要 should 作为数组来搜索多个性别。例如,一些文档具有中性性别,例如 'women,men' 多性别示例:

query: {
    bool: {
      must: {
        query_string: {
          query: "box",
          default_field: "title"
        }
      },
      filter: {
        bool: {
          should: [
            {term: {"gender.keyword": "women"}},
            {term: {"gender.keyword": "kids"}} 
            #summary it may be gender 'girls'
          ]
        }
      }
    }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多