gpt4 book ai didi

java - 如何使用 Java API 获得 Elasticsearch 5.2.2 搜索突出显示

转载 作者:太空宇宙 更新时间:2023-11-04 11:36:52 24 4
gpt4 key购买 nike

要让 Elasticsearch Java API 返回搜索突出显示需要什么?

我用来构造查询的代码类似于以下内容:

        final HighlightBuilder highlight = new HighlightBuilder()
.field("*")
.highlighterType("fvh");

final SearchRequestBuilder request = client.prepareSearch()
.setTypes("mytype")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(query)
.setFrom(currentPage)
.setSize(perPage)
.highlighter(highlight)
.addSort(orderBy.getValue(), sortOrder);

转储查询看起来像这样:

{
"from" : 0,
"size" : 10,
"query" : {
"bool" : {
"must" : [
{
"terms" : {
"my.field" : [
"myvalue"
],
"boost" : 1.0
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"sort" : [
{
"myotherfield1.myotherfield2.myotherfield3" : {
"order" : "desc"
}
}
],
"highlight" : {
"type" : "fvh",
"fields" : {
"*" : { }
}
}
}

我得到了结果,但每次点击的 .getHighlightFields() 方法都会返回一个空 map 。

最佳答案

这似乎有效。需要单独选择字段,而不是使用“_all”:

  for(String fieldName : allFields){
query.should(QueryBuilders.matchPhrasePrefixQuery(fieldName, queryText));
}
query.minimumShouldMatch(1);

final HighlightBuilder highlight = new HighlightBuilder()
.highlighterType("plain")
.preTags("")
.postTags("");

for(String fieldName : allSearchFields) {
highlight.field(fieldName);
}

final SearchRequestBuilder request = client.prepareSearch()
.setTypes("mytype")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(query)
.setFrom(currentPage)
.setSize(perPage)
.highlighter(highlight)
.addSort(orderBy.getValue(), sortOrder);

关于java - 如何使用 Java API 获得 Elasticsearch 5.2.2 搜索突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43189614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com