Elasticsearch重点:如何在Java客户端中获取该字段的整个文本

时间:2014-08-03 13:31:56

标签: elasticsearch

我是Elasticsearch的新手。我希望在Java客户端中获得突出显示的字段。如果我在Windows提示符下运行以下查询:

{
    "query": {
        "filtered" : {
            "query" : {
                "term" : {
                    "title" : "western"
                }
            },
            "filter" : {
                "term" : { "year" : 1961 }
            }
        }
    },
    "highlight" : {
        fields" : {
            "title" : {}
            }
        }
}

我得到了很好的突出显示文字如下:

{
      "_index" : "book",
      "_type" : "history",
      "_id" : "1",
      "_score" : 0.095891505,
      "_source":{ "title": "All Quiet on the Western great Front", "year": 1961}
      "highlight" : {
        "title" : [ "All Quiet on the <em>Western</em> great Front dead" ]
      }
}

亮点

  "highlight" : {
    "title" : [ "All Quiet on the <em>Western</em> great Front dead" ]
  }

可以很容易地转换为Java Map对象,&#34; title&#34; property包含匹配字段的整个文本,这正是我想要的。

但是,在Java客户端中,我得到突出显示的片段,它将同一字段的突出显示文本的不同段放入文本数组中。

谢谢和问候。

3 个答案:

答案 0 :(得分:9)

在Java API中,返回的默认片段数为5.因此,如果您只想要返回一个片段,则需要设置它。

client.prepareSearch("book")
 .setTypes("history")
 .addHighlightedField("title")
 .setQuery(query)
 .setHighlighterFragmentSize(2000)
 .setHighlighterNumOfFragments(1);

答案 1 :(得分:1)

这是我发现的,我不确定这是正确的还是最佳的解决方案。在Java客户端中,使用setHighlighterFragmentSize方法:

SearchResponse sr = client.prepareSearch("book")
                .setTypes("history")
                .addHighlightedField("title")
                .setQuery(query)
                .setHighlighterFragmentSize(2000) //set it larger than the size of the field so that the only one fragment is returned and it contains the entire text of the field.

我真的很想听听那里的专家说什么,并选择他们的回答作为答案。

问候。

答案 2 :(得分:1)

您还可以将片段数设置为0,这将显示带有突出显示标签的整个字段。这也将忽略fragment_size。

.setHighlighterNumOfFragments(0)