簡體   English   中英

ElasticSearch嵌套查詢不返回數據

[英]ElasticSearch Nested Query not returning data

我在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

您應該對嵌套字段使用完全限定的名稱。 使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM