elasticsearch - 如何创建 ElasticSearch 查询来获取此信息?

标签 elasticsearch

我需要通过 Python 模块查询 ElasticSearch 索引,我对 ElasticSearch 非常陌生。假设我的索引存储了成对的人和关于每对人的一些信息。我想知道如何创建一个 ElasticSearch 查询,它会给我以下一对。基本上,我想得到 some info来自 person1 的对中的字段值被命名为 John Whiteteacherperson2被命名为 Sarah Blackdoctor .我想要一个完全匹配,而不是模糊匹配。

"person1": {
    "name": "John White",
    "job": "teacher"

}
"person2": {
    "name": "Sarah Black",
    "job": "doctor"
}
"some info": "blah blah"

我尝试了下面的查询,但它给了我配对,其中只有一对匹配我要求的信息,另一个人的姓名/工作可能非常不同。如何获得两个人的信息匹配的完全匹配?
  "query": {
    "bool" : {
        "must": {
            "bool" : {
                "should": [
                    { "match": { "person1.name": "John White" }},
                    { "match": { "person1.job": "teacher" }}
                  ],
                "should": [
                    { "match": { "person2.name": "Sarah Black" }},
                    { "match": { "person2.job": "doctor" }}
                  ]
            }
        }
    }
  }

最佳答案

像这样试试

为您的索引映射

{
  "settings": {
    "analysis": {
      "normalizer": {
        "lc_normalizer": {
          "type": "custom",
          "filter": ["lowercase"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "person1": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "exact": {
                "type": "keyword",
                "normalizer": "lc_normalizer"
              }
            }
          },
          "job": {
            "type": "keyword"
          }
        }
      },
      "person2": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "exact": {
                "type": "keyword",
                "normalizer": "lc_normalizer"
              }
            }
          },
          "job": {
            "type": "keyword"
          }
        }
      },
      "some_info": {
        "type": "text"
      }
    }
  }
}

询问
{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "person1.name.exact": "john white"
        }},
        {"match": {
          "person2.name.exact": "Sarah Black"
        }},
        { "term": { "person1.job": "teacher"}},
        { "term": { "person2.job": "doctor"}}
      ]
    }
  }
}

希望能帮助到你

关于elasticsearch - 如何创建 ElasticSearch 查询来获取此信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58043715/

相关文章:

java - Redis 服务器和 Elasticsearch 集成

java - Elasticsearch:按字母顺序排序,忽略数字和特殊字符

elasticsearch - Docker中的Elasticsearch 2.0.0集群Zen Zen发现

elasticsearch - 如何使用EFK堆栈在kubernetes集群中获取审核,文件拍和度量拍日志?

elasticsearch - 从Kafka到Spark的流式传输到 Elasticsearch 索引

elasticsearch - ElasticSearch 5.2用空格分隔句子

elasticsearch - ElasticSearch:计算一组文档中一组单词的出现频率

elasticsearch - 如何在Elasticsearch-6.4.0.jar中使用Count API获取匹配数据的数量

elasticsearch - Elasticsearch:无法从关键字字段获取结果

elasticsearch - 那种elasticsearch不会发射任何 pods 吗?