2014-02-14 153 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); 
}); 
} 
相关问题