【问题标题】:Filter query is not working in elastic search过滤器查询在弹性搜索中不起作用
【发布时间】:2020-07-25 03:42:44
【问题描述】:

我有文档和搜索查询,如下所示,在创建索引时,弹性最初无法获取匹配的异常 id 的文档,我已经完成了映射,之后它就无法获取记录

我的映射如下所示

{
  "mappings": {
    "properties": {
      "events": {
        "type": "nested",
        "properties": {
          "data": {
            "type": "nested",
            "properties": {
              "comments": {
                "type": "nested",
                "properties": {
                  "type": {
                    "type": "keyword"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

这是我正在使用搜索查询测试的索引文档。

{
  "id": "1",
  "score": 1,
  "comments": [{
    "id": "1",
    "type": "Delayed",

【问题讨论】:

  • 如果 events.recommendationData 是嵌套字段,那么您需要使用嵌套查询。
  • 我使用了嵌套类型,我在问题部分添加了映射,请看一下。

标签: elasticsearch elastic-stack elasticsearch-5 elasticsearch-query


【解决方案1】:

您不能直接在嵌套字段上使用查询字符串,您需要对其使用嵌套查询

GET <index-name>/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": { --> note
            "path": "events.recommendationData",
            "query": {
              "query_string": {
                "query": "\"1\" OR \"2\"",
                "fields": [
                  "events.recommendationData.exceptionId"
                ],
                "type": "best_fields",
                "default_operator": "or",
                "max_determinized_states": 10000,
                "enable_position_increments": true,
                "fuzziness": "AUTO",
                "fuzzy_prefix_length": 0,
                "fuzzy_max_expansions": 50,
                "phrase_slop": 0,
                "escape": false,
                "auto_generate_synonyms_phrase_query": true,
                "fuzzy_transpositions": true,
                "boost": 1
              }
            }
          }
        }
      ]
    }
  },
  "size": 1, --> note, to return documents ,keep 0 for only aggs
  "aggs": {
            "genres": {
                "nested": {
                    "path": "events.recommendationData.recommendations"
                },
                "aggs": {
                    "nested_comments_recomms": {
                        "terms": {
                            "field": "events.recommendationData.recommendations.recommendationType"
                        }
                    }
                }
            }
        }
}

【讨论】:

  • "size": 1, --> 注意,如果 aggs 始终为 1,则返回文档 0。
  • 如果您想查看 hits ,请给 size 一些值。如果只需要聚合,您可以将大小设为 0
  • 我猜这是为了优化。
  • 知道如何生成等效的 java 代码我正在尝试下面的代码,但它无法生成与上面相同的查询。 NestedQueryBuilder queryBuilders = QueryBuilders.nestedQuery("events.recommendationData" , boolQueryBuilder.filter(QueryBuilders .queryStringQuery(String.join(" OR ", exactMatchThese)) .field("events.recommendationData.exceptionId")), ScoreMode.None);
  • 我没有使用过 java rest 客户端,下面的答案可以帮助它stackoverflow.com/questions/24710831/…
猜你喜欢
  • 2019-12-17
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 2015-01-25
  • 2016-03-02
相关资源
最近更新 更多