2014-02-14 209 views
2

我在Elasticsearch中遇到突出顯示結果的問題。我的查詢工作,它確實返回結果,但他們沒有突出顯示...所以我一直在尋找,但我無法找到我做錯了什麼!在Elasticsearch中搜索突出顯示(javascript)

這是我的代碼:

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); 
    }); 
} 

我正在搜索的數據,然後把它放在一個表,做工精細。但突出顯示不起作用。請幫助我!

回答

2

我有這個問題,事實證明,當你指定高亮參數時,elasticsearch不僅返回'_source'字段,還返回'高亮'字段。經進一步檢查,ES docs似乎證實了這一點:

會出現在每個搜索命中另一種元素,稱爲亮點,其中包括突出顯示的字段,並突出顯示的片段

因此,要獲得這個工作,你需要換代碼中的「亮點」「_source」:

<td>'+obj.highlight.name+'</td> 

我還發現,ES也使方括號中的亮點響應,所以在我的情況下,(使用AngularJS)我ac簡化了數值如下:

// ...ng-repeat=result in results... 
<p ng-bind-html="result.highlight.body[0]">{{result.highlight.body[0]}}</p> 
0

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); 
}); 
} 
相關問題