【问题标题】:Elastic Search : Highlighted field not always returned弹性搜索:突出显示的字段并不总是返回
【发布时间】:2017-09-23 00:01:48
【问题描述】:

使用 Java API,我需要能够检索与查询关联的字段/突出显示的字段。因此,我将_all 字段(或*)添加到查询中,并将突出显示的字段添加到响应中。 它大部分时间都有效,但并非总是如此。这是一个 sn-p :

        final BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

        Arrays.asList(query.split(" "))
                .stream()
                .map(QueryParser::escape)
                .map(x -> String.format("*%s*", x))
                .forEach(x -> {
                    boolQueryBuilder.should(
                            QueryBuilders.queryStringQuery(x)
                                    .field("_all")
                                    .allowLeadingWildcard(true));
                });

        SearchResponse response = client
                .prepareSearch()
                .setSize(10)
                .addHighlightedField("*")
                .setHighlighterRequireFieldMatch(false)
                .setQuery(boolQueryBuilder)
                .setHighlighterFragmentSize(40)
                .setHighlighterNumOfFragments(40)
                .execute()
                .actionGet();

知道为什么field 字段和highlightedField 在技术上总是被查询,因此在响应中并不总是可以访问吗?

【问题讨论】:

  • 嗨,我听不懂。您能否在您的场景中给出带有虚拟数据的实时示例?

标签: java elasticsearch highlighting


【解决方案1】:

不确定,但我认为您可能正在寻找这个:-

String aQueryWithPartialSerach = null;
final BoolQueryBuilder aBoolQueryBuilder = new BoolQueryBuilder();

 // Enabling partial sarch
        if (query.contains(" ")) {
            List<String> aTokenList = Arrays.asList(query.split(" "));
            aQueryWithPartialSerach = String.join(" ", aTokenList.stream().map(p -> "*" + p + "*").collect(Collectors.toList()));
        } else {
            aQueryWithPartialSerach = "*" + query + "*";
        }

aBoolQueryBuilder.should(QueryBuilders.queryStringQuery(aQueryWithPartialSerach));

【讨论】:

    猜你喜欢
    • 2018-03-26
    • 2016-08-28
    • 1970-01-01
    • 2017-07-02
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多