首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要弹性搜索指南来搜索一组化学物质

需要弹性搜索指南来搜索一组化学物质
EN

Stack Overflow用户
提问于 2020-12-30 21:44:27
回答 1查看 125关注 0票数 0

我有每一种产品的产品清单和化合物阵列,即‘钠’,‘碳酸氢钠’,……。在本例中,‘not’‘碳酸氢钠’是两个可以独立搜索的不同值,这使事情复杂化,因此使用text关键字字段标准没有帮助。

我需要一些关于在Elasticsearch中处理这些字符串数组的最佳方法的指导,同时保留Elasticsearch的索引魔力。我很感激你能提供的任何帮助。

目前我正在使用Elasticsearch 6.3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-31 02:12:21

您可以使用 多匹配查询,它构建在匹配查询的基础上,允许多字段查询

使用索引数据、搜索查询和搜索结果添加一个工作示例。

索引数据:

代码语言:javascript
复制
{
  "product": "product1",
  "compounds": [
    "Sodium",
    "Sodium bicarbonate"
  ]
}
{
  "product": "product2",
  "compounds": [
    "Sodium"
  ]
}
{
  "product": "product3",
  "compounds": [
    "Sodium bicarbonate"
  ]
}
{
  "product": "product4",
  "compounds": [
   "Chlorine
  ]
}

搜索查询:

代码语言:javascript
复制
{
  "query": {
    "multi_match" : {
      "query":    "Sodium AND Sodium bicarbonate", 
      "fields": [ "compounds", "compounds.keyword" ] 
    }
  }
}

搜索结果:

代码语言:javascript
复制
"hits": [
      {
        "_index": "65513968",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.0897084,
        "_source": {
          "product": "product1",
          "compounds": [
            "Sodium",
            "Sodium bicarbonate"
          ]
        }
      },
      {
        "_index": "65513968",
        "_type": "_doc",
        "_id": "3",
        "_score": 1.0659102,
        "_source": {
          "product": "product3",
          "compounds": [
            "Sodium bicarbonate"
          ]
        }
      },
      {
        "_index": "65513968",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.7032229,
        "_source": {
          "product": "product",
          "compounds": [
            "Sodium"
          ]
        }
      }
    ]

如果要返回包含字段中一个或多个确切术语的文档,则可以使用 术语查询

一份独特的化合物清单

要查找化学化合物的唯一列表,可以使用术语聚合

代码语言:javascript
复制
{
  "size": 0,
  "aggs": {
    "compounds": {
      "terms": {
        "field": "compounds.keyword"
      }
    }
  }
}

结果:

代码语言:javascript
复制
"aggregations": {
    "compounds": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "Sodium",
          "doc_count": 2
        },
        {
          "key": "Sodium bicarbonate",
          "doc_count": 2
        },
        {
          "key": "Chlorine",
          "doc_count": 1
        }
      ]
    }
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65513968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档