2016-04-26 9 views
5

के साथ 1 पर रहता है हम ElasticSearch 2.2.0 के लिए elastic4s का उपयोग कर रहे हैं। डिस्क पर JSON के रूप में कई प्रश्न संग्रहीत किए जाते हैं और elastic4s ड्राइवर के माध्यम से rawQuery के रूप में उपयोग किए जाते हैं। परिणाम में स्कोर कमांड लाइन या elastic4s ड्राइवर के माध्यम से सबमिट की जा रही क्वेरी के बीच अलग है। Elastic4s ड्राइवर हमेशा सभी परिणामों के लिए 1 का स्कोर देता है, जबकि कमांड लाइन निष्पादन दो अलग-अलग स्कोर (विभिन्न डेटा प्रकारों के लिए) उत्पन्न करता है।elastic4s: स्कोर rawQuery

elastic4s के लिए कोड:

val searchResult = client.execute { 
     search in indexName types(product, company, orga, "User", "Workplace") rawQuery preparedQuery sourceInclude(preparedSourceField:_*) sort {sortDefintions:_*} start start limit limit 
    }.await 

ध्यान दें कि मैं लेकिन rawQuery preparedQuery कुछ भी हटा दिया है और यह स्कोर नहीं बदला। कमांड लाइन के माध्यम से पूर्ण क्वेरी काफी लंबा है:

{ 
    "query": { 
     "bool": { 
      "must": [ 
       { 
        "multi_match": { 
         "query": "${search}", 
         "fields": [ 
          "name", 
          "abbreviation", 
          "articleNumberManufacturer", 
          "productLine", 
          "productTitle^10", 
          "productSubtitle", 
          "productDescription", 
          "manufacturerRef.name", 
          "props" 
         ] 
        } 
       } 
      ], 
      "filter": [ 
       { 
        "or": [ 
         { 
          "bool": { 
           "must": [ 
            { 
             "type": { 
              "value": "Product" 
             } 
            }, 
            { 
             "term": { 
              "publishState": "published" 
             } 
            } 
           ], 
           "must_not": [ 
            { 
             "term": { 
              "productType": "MASTER" 
             } 
            }, 
            { 
             "term": { 
              "deleted": true 
             } 
            } 
           ] 
          } 
         } 
        ] 
       } 
      ] 
     } 
    } 
} 

ध्यान दें कि यह लगभग preparedQuery लेकिन खोज क्वेरी के साथ $search के प्रतिस्थापन के लिए है। लोचदार खोज आरईएसटी क्लाइंट मैचों के लिए 3.075806 का स्कोर देता है।

+0

के एक सदस्य जब आप कहते हैं कि परिणाम स्कोर नहीं है इस पर-आइटम स्कोर है? "लोचदार खोज आरईएसटी क्लाइंट मैचों के लिए 3.075806 का स्कोर देता है।" क्या मतलब है? – James

+0

क्या आपको elastic4s ड्राइवर और REST के माध्यम से सटीक परिणाम मिलते हैं? – Val

+0

@ लोचदार खोज जेएसटीएस का मतलब है क्लाइंट सीधे कर्ल के माध्यम से लोचदार खोज पूछताछ। वैल आरईएसटी क्वेरी के लिए वैल्यू स्कोर अलग है, elastic4s और 3.075806 के लिए 1 अलग है। – TeTeT

उत्तर

0

elastic4s rawQuery आपके कच्चेQuery-JSON को किसी अन्य क्वेरी ऑब्जेक्ट में लपेट देगा।

जैसे आप के लिए

{ "query": { "query": {  
    "bool": { 
     "must": [ 
      { 
       "multi_match": { 
        "query": "${search}", 
... 

क्वेरी केवल आपके JSON से अपने लपेटकर "क्वेरी" हटा और प्रतिक्रिया अलग स्कोर दिखाएगा है।

वैकल्पिक रूप से आप rawQuery के बजाय extraSource का उपयोग करने का प्रयास कर सकते हैं, जैसे elastic4s docu में वर्णित। हालांकि यह सब मेरे लिए काम नहीं किया:

त्रुटिसंदेश: मूल्य extraSource, com.sksamuel.elastic4s.SearchDefinition

संबंधित मुद्दे