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

cur*_*us1 4 elasticsearch

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

{
    "query": {
        "filtered" : {
            "query" : {
                "term" : {
                    "title" : "western"
                }
            },
            "filter" : {
                "term" : { "year" : 1961 }
            }
        }
    },
    "highlight" : {
        fields" : {
            "title" : {}
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

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

{
      "_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" ]
      }
}
Run Code Online (Sandbox Code Playgroud)

亮点

  "highlight" : {
    "title" : [ "All Quiet on the <em>Western</em> great Front dead" ]
  }
Run Code Online (Sandbox Code Playgroud)

可以很容易地转换为Java Map对象,"title"属性包含匹配字段的整个文本,这正是我想要的.

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

感谢致敬.

Dan*_*ery 9

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

client.prepareSearch("book")
 .setTypes("history")
 .addHighlightedField("title")
 .setQuery(query)
 .setHighlighterFragmentSize(2000)
 .setHighlighterNumOfFragments(1);
Run Code Online (Sandbox Code Playgroud)