为什么elasticsearch matchQuery不返回结果?

我已成功使用 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));


12345678_0001
浏览 107回答 2
2回答

拉莫斯之舞

也许是这样的:GET index/_search{  "query": {    "bool": {      "must": [        {          "multi_match": {            "query": "ipsum",            "fields": []          }        },        {          "match": {            "type": "cq:Page"          }        }      ]    }  }}"fields": [] -> meaning all fields

烙印99

它使用matchPhraseQuery而不是 matchQuery 来工作。我的值是“cp:Page”。在这种情况下,仅当该术语的值与其索引中的值完全相同时,matchQuery 才会返回文档(并且在查询时没有使用分析器)。另一方面,matchPhraseQuery 也会在查询时使用默认分析器,因此查询中的值在分析器更改后将与索引值相同。可以按查询、按字段或按索引指定分析器。在索引时,Elasticsearch 将按以下顺序查找分析器:字段映射中定义的分析器。索引设置中名为 default 的分析器。标准分析仪。在查询时,还有几个层:全文查询中定义的分析器。 search_analyzer 定义在字段映射中。字段映射中定义的分析器。索引设置中名为default_search的分析器。索引设置中名为 default 的分析器。标准分析仪。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java