为了账号安全,请及时绑定邮箱和手机立即绑定

为什么elasticsearch matchQuery不返回结果?

为什么elasticsearch matchQuery不返回结果?

12345678_0001 2024-01-28 20:23:39
我已成功使用 Elasticsearch 对内容建立了索引,但在尝试查询内容时遇到了麻烦。我想要做的是搜索所有包含值“ ipsum ”(在任何术语中)并且术语“type”应等于“cq:Page”的文档。我正在使用高级 Rest Java 客户端。尝试使用过滤和 Boolquery 但它返回零结果。例子:SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.from(0);sourceBuilder.size(10);SearchRequest searchRequest = new SearchRequest();searchRequest.indices("gettingstarted");searchRequest.source(sourceBuilder);BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();                boolQueryBuilder.must(QueryBuilders.queryStringQuery("ipsum"));boolQueryBuilder.must(QueryBuilders.matchQuery("type", "cq:Page"));sourceBuilder.query(boolQueryBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);也尝试过此操作,但没有成功,它返回零结果。boolQueryBuilder.must(QueryBuilders.matchQuery("type", NT_PAGE));
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

也许是这样的:


GET index/_search

{

  "query": {

    "bool": {

      "must": [

        {

          "multi_match": {

            "query": "ipsum",

            "fields": []

          }

        },

        {

          "match": {

            "type": "cq:Page"

          }

        }

      ]

    }

  }

}


"fields": [] -> meaning all fields


查看完整回答
反对 回复 2024-01-28
?
烙印99

TA贡献1829条经验 获得超13个赞

它使用matchPhraseQuery而不是 matchQuery 来工作。我的值是“cp:Page”。

在这种情况下,仅当该术语的值与其索引中的值完全相同时,matchQuery 才会返回文档(并且在查询时没有使用分析器)。

另一方面,matchPhraseQuery 也会在查询时使用默认分析器,因此查询中的值在分析器更改后将与索引值相同。

可以按查询、按字段或按索引指定分析器。在索引时,Elasticsearch 将按以下顺序查找分析器:

字段映射中定义的分析器。索引设置中名为 default 的分析器。标准分析仪。在查询时,还有几个层:

全文查询中定义的分析器。 search_analyzer 定义在字段映射中。字段映射中定义的分析器。索引设置中名为default_search的分析器。索引设置中名为 default 的分析器。标准分析仪。


查看完整回答
反对 回复 2024-01-28
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信