【问题标题】:ElasticSearch Nested Query not returning dataElasticSearch嵌套查询不返回数据
【发布时间】:2019-02-22 14:50:29
【问题描述】:

我在 ElasticSearch(客户)中有一个索引,它具有以下部分映射:

      "addresses": {
          "type": "nested",
          "properties": {
              "address": {
                  "type": "keyword"
              },
              "phone": {
                  "type": "keyword"
              }
          }
      },

我正在尝试搜索特定地址(我们称之为“foo street”)。我正在使用 ElasticSearch 6.3。和 RestHighLevelClient(6.3)。

在我的例子中,以下变量具有以下值:

docName = "addresses"
name = "address"
value = "foo street"

我知道我的客户索引中至少有一个文档的地址是“foo street”

我创建 NestedQueryBuilder 的代码是这样的:

QueryBuilder innerQuery = QueryBuilders.matchQuery(name, value);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery(
    docName, innerQuery, ScoreNode.None);

SearchRequest request = new SearcRequest("customers");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(nestedQueryBuilder);
searchSourceBuilder.from(from);
searchSourceBuilder.size(size);
request.source(searchSourceBuilder);

如果我记录我的 NestedQueryBuilder 对象(调用 toString(),这就是我得到的:

{
"nested" : {
  "query" : {
    "match" : {
      "ip_address" : {
        "query" : "10.214.159.193",
        "operator" : "OR",
        "prefix_length" : 0,
        "max_expansions" : 50,
        "fuzzy_transpositions" : true,
        "lenient" : false,
        "zero_terms_query" : "NONE",
        "auto_generate_synonyms_phrase_query" : true,
        "boost" : 1.0
      }
    }
  },
  "path" : "links",
  "ignore_unmapped" : false,
  "score_mode" : "none",
  "boost" : 1.0
}
}

为什么我没有得到任何点击?

以下是SearchResponse中的值:

Status: OK
Took: 0s
terminatedEarly: null
timedOut: false
total hits: 0
maxScore: NaN

【问题讨论】:

    标签: java elasticsearch nested


    【解决方案1】:

    您应该为嵌套字段使用完全限定名称。使用links.ip_address 而不是ip_address

    您的查询应该如下:

    {
      "nested": {
        "query": {
          "match": {
            "links.ip_address": {          <--------------------- change here
              "query": "10.214.159.193",
              "operator": "OR",
              "prefix_length": 0,
              "max_expansions": 50,
              "fuzzy_transpositions": true,
              "lenient": false,
              "zero_terms_query": "NONE",
              "auto_generate_synonyms_phrase_query": true,
              "boost": 1
            }
          }
        },
        "path": "links",
        "ignore_unmapped": false,
        "score_mode": "none",
        "boost": 1
      }
    }
    

    在代码中:

    String fullName = docName + "." + name;
    QueryBuilder innerQuery = QueryBuilders.matchQuery(fullName, value);
    

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多