[英]Search highlight in Elasticsearch (javascript)
我在Elasticsearch中突出顯示結果時遇到問題。 我的查詢有效,它確實返回結果,但是未突出顯示它們……因此我一直在搜索,但找不到我做錯的事情!
這是我的代碼:
function search(searchInput){
emptyTable();
client.search({
index: 'movies',
size: 5,
body: {
query: {
//match: {_all: searchInput}
"term": {
"_all" : searchInput
}
},
"highlight": {
"require_field_match": true,
"fields": {
"_all": {
"pre_tags": [
"<b>"
],
"post_tags": [
"</b>"
]
}
}
}
}
}).then(function (resp) {
var hits = resp.hits.hits;
var hitcount = resp.hits.total;
if(!jQuery.isEmptyObject(hits)){
console.log(hits);
$.each(hits, function(key,obj) {
if(key%2==0){
$('#table').append('<tr><td>'+obj._source.imdbid+'</td><td>'+obj._source.name+'</td><td>'+obj._source.desc+'</td></tr>');
}else{
$('#table').append('<tr class="even"><td>'+obj._source.imdbid+'</td><td>'+obj._source.name+'</td><td>'+obj._source.desc+'</td></tr>');
}
});
}
$('#count').html("Aantal resultaten: "+hitcount);
});
}
我正在搜索數據,然后將其放在表中,效果很好。 但是突出顯示根本不起作用。 請幫幫我!
我遇到了同樣的問題,事實證明,當您指定Highlight參數時,elasticsearch不僅返回'_source'字段,而且還返回'highlight'字段。 經過進一步檢查,ES 文檔似乎確認了這一點:
每個搜索命中都會有另一個元素,稱為突出顯示,其中包括突出顯示的字段和突出顯示的片段
因此,要使其正常工作,您需要在代碼中將“ _source”替換為“ highlight”:
<td>'+obj.highlight.name+'</td>
我還發現ES還將突出顯示的響應放在方括號中,因此在我的情況下(使用AngularJS)我按如下方式訪問該值:
// ...ng-repeat=result in results...
<p ng-bind-html="result.highlight.body[0]">{{result.highlight.body[0]}}</p>
ES 2.2的工作版本。 在查詢的突出顯示部分中使用
require_field_match:否,
function search(searchInput){
emptyTable();
client.search({
index: 'movies',
size: 5,
body: {
query: {
//match: {_all: searchInput}
term: {
_all: searchText
}
},
highlight: {
require_field_match: false,
fields: {
"*": {
"pre_tags": [
"<b>"
],
"post_tags": [
"</b>"
]
}
}
}
}
}).then(function (resp) {
var hits = resp.hits.hits;
var hitcount = resp.hits.total;
if(!jQuery.isEmptyObject(hits)){
console.log(hits);
$.each(hits, function(key,obj) {
if(key%2==0){
// All highlight fields here...
$('#table').append('<tr><td>'+obj.highlight.imdbid+'</td><td>'+obj.highlight.name+'</td><td>'+obj.highlight.desc+'</td></tr>');
}else{
$('#table').append('<tr class="even"><td>'+obj._source.imdbid+'</td><td>'+obj._source.name+'</td><td>'+obj._source.desc+'</td></tr>');
}
});
}
$('#count').html("Aantal resultaten: "+hitcount);
});
}
這個更簡單的版本也適用於我,elasticsearch 5,節點8.7,elasticsearch.js節點模塊:
response = await client.search({
index: indexName,
type: indexType,
q: query,
highlight: {
fields: {
"*": {
"pre_tags": ["<b>"],
"post_tags": ["</b>"]
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.