为什么matchPhrasePrefix查询不适用于下划线文本字段?

时间:2018-01-17 05:16:15

标签: java elasticsearch

在我的弹性索引中,我的文档字段带有下划线分隔的单词,例如' 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。但都未能正确归还文档。

0 个答案:

没有答案