gpt4 book ai didi

elasticsearch - Elasticsearch多字段搜索(与或)

转载 作者:行者123 更新时间:2023-12-03 02:06:35 25 4
gpt4 key购买 nike

我正在尝试找出Elasticsearch。
我看了遍整个互联网,发现的只是基本示例。

首先,我需要在两个字段(field_A,field_B)中搜索并返回结果,其中

  • field_A的值等于valueA或valueB或valueC
  • field_B的值等于valueD

  • 我设法做到这一点:
    {
    "query": {
    "filtered": {
    "filter": {
    "bool": {
    "must": [
    {
    "terms": {
    "field_A": [
    "valueA",
    "valueB",
    "valueC"
    ]
    }
    }
    ],
    "should": [
    {
    "term": {
    "field_B": "valueD"
    }
    }
    ]
    }
    }
    }
    }
    }

    现在我需要搜索三个字段(完全匹配)
  • (field_A = valueA AND field_B = valueB AND field_C = valueC)OR(field_A = valueA1 AND field_B = valueB1 AND field_C = valueC1)OR ...

  • 或类似这样的东西:
  • field_A = valueA AND((field_B = valueB AND field_C = valueC)OR(field_B = valueB1 AND field_C = valueC1)OR ...)

  • 我怎样才能做到这一点 ?

    最佳答案

    您可以使用elasticsearch的 bool(boolean) (和/或)过滤器。

    这是您第一个需求的简单用例,您可以为其他需求建模过滤器。

    POST /_search 
    {
    "query": {
    "filtered": {
    "query": {
    "match_all": {}
    },
    "filter": {
    "or": {
    "filters": [
    {
    "and": {
    "filters": [
    {
    "term": {
    "fieldA": "value_a"
    }
    },
    {
    "term": {
    "fieldB": "value_b"
    }
    },
    {
    "term": {
    "fieldC": "value_c"
    }
    }
    ]
    }
    },
    {
    "and": {
    "filters": [
    {
    "term": {
    "fieldA": "value_a1"
    }
    },
    {
    "term": {
    "fieldB": "value_b1"
    }
    },
    {
    "term": {
    "fieldC": "value_c1"
    }
    }
    ]
    }
    }
    ]
    }
    }
    }
    }
    }

    对于您的需求类型,使用和过滤器或或过滤器似乎不错,但如果可以的话,请始终喜欢 bool(boolean) 过滤器(如您所做的那样)。

    引用文献;

    And Filter

    Or Filter

    希望这可以帮助!!谢谢

    关于elasticsearch - Elasticsearch多字段搜索(与或),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401040/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com