2014-08-27 14 views
5

Sto utilizzando una tipica query con più abbinamenti su tre campi: nome, città, stato. La query di corrispondenza multipla utilizza anche uno script di punteggio di funzione Java. C'è un modo per sapere nello script del punteggio quali campi corrispondono alla mia query multi partita? In caso contrario, c'è un modo per capirlo dall'oggetto SearchResponse?Individuare i campi corrispondenti in una query con più corrispondenze

Attualmente sono su Elasticsearch 1.2.1 ma posso aggiornarlo facilmente se è necessario.

risposta

5

Io non credo che si possa fare questo direttamente con solo più partita, ma se si aggiunge evidenziando si dovrebbe ottenere una rappresentazione risposta che i campi abbinato:

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/highlighting-intro.html

Nell'esempio da questa pagina:

GET /megacorp/employee/_search 
    { 
     "query" : { 
      "match_phrase" : { 
       "about" : "rock climbing" 
      } 
     }, 
     "highlight": { 
      "fields" : { 
       "about" : {} 
      } 
     } 

} 

cambiereste la match_phrase ad un multi_match e aggiungere l'elenco dei campi:

GET /megacorp/employee/_search 
    { 
     "query" : { 
      "multi_match" : { 
       "query" : "rock climbing", 
       "fields": ["about", "otherfield"] 
      } 
     }, 
     "highlight": { 
      "fields" : { 
       "about" : {}, 
       "otherfield": {} 
      } 
     } 

} 

e questo dovrebbe darti una risposta chiara che include l'evidenziazione attorno al testo corrispondente e al campo che è stato abbinato.

+0

sua una buona opzione, ma questo non sarebbe accessibile da script punteggio personalizzato sarebbe? – Commander

2

C'è un altro modo esatto per scoprire quale campo è compensata nella query

Poiché il clou è processo di post clou, non è preciso a causa del modo in cui lo ha fatto

Basta usare query denominata per fanno invece di multi-partita

come

{ 
    "multi_match" : { 
     "query" : "query phrase here", 
     "fields" : [ "name", "tag", "categorys" ], 
     "operator" : "AND" 
    } 

tradurre in interrogazione bool con nome

"should": [ 
     { 
      "match": { 
       "name": { 
        "query": "query phrase here", 
        "_name":"name_field" 
       } 
      } 
     },{ 
      "match": { 
       "tag":{ 
        "query": "query phrase here", 
        "_name":"tag_field" 
       } 
      } 
     },{ 
      "match": { 
       "categorys":{ 
        "query": "query phrase here", 
        "_name":"cat_field" 
       } 
      } 
     } 
    ] 

verrà restituito il risultato come quello

 { 
     "_index": "indexName", 
     "_type": "type", 
     "_id": "id", 
     "_score": 0.27836448, 
     "matched_queries": [ 
      "tag_field" 
     ] 
    }, 
    { 
     "_index": "indexName", 
     "_type": "type", 
     "_id": "id", 
     "_score": 0.27836448, 
     "matched_queries": [ 
      "name_field", 
      "tag_field" 
     ] 
    } 
+0

Qualche suggerimento su come adattarlo quando il tipo multi_match è "cross_fields"? – rosenfeld

Problemi correlati