2014-08-27 15 views
5

Üç alanda tipik bir eşleşme sorgusu kullanıyorum: ad, şehir, eyalet. Çoklu eşleme sorgusu ayrıca bir Java işlev skoru komut dosyası kullanıyor. Skor betiğinde, çoklu eşleme sorgumla hangi alanların eşleştiğini bilmenin bir yolu var mı? Değilse, bunu SearchResponse nesnesinden çözmenin bir yolu var mı?Çoklu eşleme sorgusunda hangi alanların eşleştiğini öğrenin

Şu anda Elasticsearch 1.2.1 üzerinde yaşıyorum ancak gerekliyse kolayca yükseltebilirim.

cevap

5

Ben sadece çoklu maçı ile doğrudan yapabilirsiniz inanmıyorum, ancak vurgulayarak eklerseniz eşleşen alanları bir yanıt gösteren almalısınız: Bu sayfadan örnekte

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

:

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

} 

bir multi_match için match_phrase değiştirmek ve saha listesine eklersiniz:

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

} 

ve bu, eşleşen metin ve eşleştirilen alanın çevresindeki açıklamayı içeren bir vurgu yanıtı almalıdır.

+0

Onun iyi bir seçenek gibi bir sonuç döndürecektir ancak bu onu özel puanı komut erişilebilir olur olmaz? – Commander

2

vurgulamak sonrası vurgulamak süreci olduğu için sorguda

eşleşen hangi alan öğrenmek için başka kesin bir yolu yoktur, çünkü bu sadece adlandırılmış sorgu kullanmak

yaptığı yol doğru değildir

gibi

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

adıyla

ile bool sorgusuna çevirmek çok maç yerine bu do
"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" 
       } 
      } 
     } 
    ] 

o

 { 
     "_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

Multi_match türü "cross_fields" olduğunda nasıl uyarlayacağınıza dair öneriler var mı? – rosenfeld

İlgili konular