在我的弹性索引中,我的文档字段带有下划线分隔的单词,例如' test_upload_document.txt'。我需要对此索引执行全文搜索,并按以下方式使用MatchPhrasePrefixQuery
BoolQueryBuilder qb = new BoolQueryBuilder();
qb.must(QueryBuilders.matchPhrasePrefixQuery("_all", queryParameters.getFirst("keyword")));
SearchResponse searchResponse = client.prepareSearch(index)
.setScroll(new TimeValue(60000))
.setQuery(qb)
.setSize(100).get();
do {
for (SearchHit hit : searchResponse.getHits().getHits()) {
LOGGER.debug("source: "+hit.getSourceAsString());
//some more operations goes here
}
searchResponse = client.prepareSearchScroll(searchResponse.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
} while(searchResponse.getHits().getHits().length != 0);
我的文档包含多个文本字段
{
'name':'test_upload_document.txt'
'user': 'user name'
}
我的问题是,当我使用关键字test
运行上述查询时,它会正确返回文档。它甚至适用于test_
。但是,如果我使用upload
或名称字段的其他部分,它将无效。
这是MatchPhrasePrefix的工作原理吗?如果是,我可以使用什么查询来实现这一目标?我尝试使用QueryString,MatchPhrase和Match。但都未能正确归还文档。