Elasticsearch 匹配字符串数组

2024-03-15

我的 Elasticsearch (v5.4.1) 文档有一个_patents字段如下:

{
    // (Other fields : title, text, date, etc.)
    ,
    "_patents": [
        {"cc": "US"},
        {"cc": "MX"},
        {"cc": "KR"},
        {"cc": "JP"},
        {"cc": "CN"},
        {"cc": "CA"},
        {"cc": "AU"},
        {"cc": "AR"}
    ]
}

我正在尝试构建一个查询,该查询仅返回其专利与一系列国家/地区代码匹配的文档。 例如,如果我的过滤器是["US","AU"]我需要退还所有拥有专利的文件US and in AU。排除具有以下内容的文档US但不是AU.

到目前为止,我已尝试将“term”字段添加到我当前的工作查询中:

{
    "query": {
        "bool": {
            "must": [
                // (Other conditions here : title match, text match, date range, etc.) These work
                 ,
                {
                    "terms": {
                        "_patents.cc": [ // I tried just "_patents"
                            "US",
                            "AU"
                        ]
                    }
                }
            ]
        }
    }
}

或者这个,作为过滤器:

{
    "query": {
        "bool": {
            "must": [...],
            "filter": {
                "terms": {
                    "_patents": [
                        "US",
                        "AU"
                    ]
                }
            }
        }
    }
}

我尝试过的这些查询和变体不会产生错误,但返回 0 结果。

我无法将 ES 文档模型更改为更容易匹配的模型,例如"_patents": [ "US","CA", "AU", "CN", "JP" ]因为这是一个人口稠密的领域。在索引时,我填充并引用Patent具有许多字段的文档,包括cc.


我找到了解决方案。过滤后的国家/地区名称必须是小写...

"US"没有返回结果,但是"us"尽管索引字段是有效的"US"...... 头晕的 -_-'

我也这样写了查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "_patents.cc": "us"
          }
        },
        {
          "term": {
            "_patents.cc": "ca"
          }
        }
      ]
    }
  }
}  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch 匹配字符串数组 的相关文章

随机推荐