【问题标题】:Elasticsearch/Lucene highlightElasticsearch/Lucene 亮点
【发布时间】:2012-07-10 14:45:36
【问题描述】:

如何在elasticsearch中使用fuzzyLikeThisFieldQuery 突出显示结果查询?我可以接受fuzzyQuery 但不能接受fuzzyLikeThisFieldQuery。例如,在下面的代码中我使用了模糊查询:

QueryBuilder allquery = QueryBuilders.fuzzyQuery("name", "fooobar").minSimilarity(0.4f);

SearchRequestBuilder builder = ds.getElasticClient()
                                        .prepareSearch("data")
                                        .setQuery(allquery)
                                        .setFrom(0)
                                        .setSize(10)
                                        .setTypes("entity")
                                        .setSearchType(SearchType.DEFAULT)
                                        .addHighlightedField("name")
                                        .addField("name");

    SearchResponse sr = builder.execute().actionGet();

结果是

If you want to have a <em>foobar</em> for oracle

但是如果我使用了fuzzyLikeThisFieldQuery,并没有突出显示

QueryBuilder allquery = QueryBuilders.fuzzyLikeThisFieldQuery("name").likeText("fooobar").minSimilarity(0.4f);

结果是

If you want to have a foobar for oracle

有人知道为什么吗?

【问题讨论】:

    标签: lucene highlight elasticsearch


    【解决方案1】:

    我需要突出显示关键字并使用我在下面编写的方法对我来说效果很好:

    searchRequest.setQuery(
           QueryBuilders.queryString(q))
           .addHighlightedField("title")
           .addHighlightedField("text")
           .setHighlighterPreTags("<em>")
           .setHighlighterPostTags("</em>");
     _searchResponse = searchRequest.execute().actionGet();
    

    我使用 Gson 将响应字符串解析为 json 对象并转换为我的实体,如下所示:

    root = new JsonParser().parse(_searchResponse.toString());
    p.results.add(root.getAsJsonObject().get("hits").getAsJsonObject().get("hits"));
    

    你会得到这样的回应:

        content: {
    results: [
    [
    {
    _index: "news",
    _type: "news",
    _id: "111",
    _score: 0.6056677,
    _source: {
    id: "1349298458",
    title: "Title text",
    text: "Detail text"
    },
    highlight: {
    text: [
    " some text <em>keyword</em> some text <em>keyword</em>- some text <em>keyword</em> some text."
    ]
    }
    },...
    

    希望您了解它的工作原理并亲自尝试。

    【讨论】:

      【解决方案2】:

      你需要调用这两个函数来设置荧光笔标签..

      builder.setHighlighterPreTags("<pre>").setHighlighterPostTags("</pre>");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-18
        • 2015-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多