2016-05-10 8 views
1

Ich habe Hervorhebung in meine Elasticsearch-Abfragen hinzugefügt, scheint jedoch auf Felder hervorzuheben, die ich nicht denke, dass es sollte.ElasticSearch Hervorhebung nicht das, was ich erwarten würde

Dies ist meine Frage:

{ 
    "from": 0, 
    "size": 100, 
    "sort": [ 
    { 
     "entityName.raw": { 
     "order": "asc" 
     } 
    } 
    ], 
    "highlight": { 
    "pre_tags": [ 
     "<span class=\"highlighter\">" 
    ], 
    "post_tags": [ 
     "</span>" 
    ], 
    "fields": { 
     "entityName": {}, 
     "friendlyUrl": {}, 
     "sentBy": {} 
    }, 
    "require_field_match": true 
    }, 
    "query": {"bool":{"must":[{"match":{"_all":{"query":"test","operator":"and"}}}]}}, 
    "filter": { 
    "bool": { 
     "must": [ 
     { 
      "term": { 
      "serviceId": "0b6d064d-1430-4b04-99f7-c30dc03860fc" 
      } 
     }, 
     { 
      "term": { 
      "subscriptionId": "a29f30e6-f44b-42cc-82c4-f7cb98cb44ef" 
      } 
     }, 
     { 
      "term": { 
      "subscriptionType": 0 
      } 
     }, 
     { 
      "terms": { 
      "entityType": [ 
       "4" 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 

Und hier ist eine Linie, auf meinem Server, der die Markierung fügt hinzu:

desc.Highlight(h => h.PreTags("<span class=\"highlighter\">").PostTags("</span>").OnFields(ff => ff.OnField("entityName"), fff => fff.OnField("friendlyUrl"), x => x.OnField("sentBy"))); 

Diese Abfrage sollte alle Dokumente finden, die passt die Wildcard john* und die Regexp .* auf dem keywords Feld (ich muss für keywords != "" überprüfen). Das Problem ist, wenn die Ergebnisse zurückkommen, kommt die Textmarker-Antwort zurück und markiert alles in den Dokumenten.

Es ist, als ob die Regexp ignoriert die Tatsache, dass ich sagte, dass es nur auf das keywords Feld schauen und stattdessen auf allen Feldern übereinstimmt. Ich würde erwarten, dass der Highlighter nur das Feld keywords hervorhebt, wenn es .* entspricht, aber es ist nicht ...

Was mache ich falsch?

Antwort

1

Fügen Sie Ihrem Textmarker "require_field_match": true hinzu, um die Übereinstimmung auf den abgefragten Feldern zu erzwingen.

+0

Ich lese schon darüber, aber die Docs sagen, der Standard ist "wahr", also dachte ich nicht, dass dies eine Rolle spielen würde. Ich werde es trotzdem ausprobieren, nur für den Fall. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-highlighting.html#field-match –

+0

Ok. Lass mich wissen wie es geht. –

+0

Also fügte ich das hinzu und es ließ die Hervorhebung für diese Abfrage weg, aber es schien es auch für alle meine anderen Fragen weggehen zu lassen ... Jetzt kommt nichts mehr mit Hervorhebung zurück, obwohl es sollte. –

Verwandte Themen