क्वेरी स्ट्रिंग क्वेरी ES में और कई फ़ील्ड से मेल खाते हुए, मैं यह कॉन्फ़िगर करने के लिए एक TYPE पैरामीटर सेट कर सकता हूं कि ES एकाधिक फ़ील्ड पर मिलान करते समय कैसे संयोजित/स्कोर करता है।

जैसे मैं अपने सूचकांक में दो क्षेत्रों का मिलान करना चाहता हूं, और दोनों क्षेत्रों से स्कोर जोड़ना चाहता हूं

GET /_search
{
    "query": {
        "query_string" : {
            "query" : "test",
            "fields": ["titel", "content"],
            "type": "most_fields"
      }
    }
}

ऐसा लगता है कि सरल क्वेरी स्ट्रिंग। साधारण क्वेरी स्ट्रिंग के लिए डिफ़ॉल्ट मोड क्या है? अंकों को कैसे चुना/संयुक्त किया जाता है? क्या टाइप सेट करना संभव है।

1
Lasse Normann 30 मार्च 2020, 13:02

1 उत्तर

सबसे बढ़िया उत्तर

साधारण क्वेरी स्ट्रिंग में कोई प्रकार पैरामीटर नहीं है। यह प्रत्येक क्षेत्र से स्कोर का योग करता है।

नीचे दिए गए इंडेक्स पर विचार करें और देखें कि का उपयोग करके विभिन्न क्वेरीज़ स्कोर की गणना कैसे करती हैं स्पष्टीकरण एपीआई

मैपिंग:

PUT testindex6
{
  "mappings": {
    "properties": {
      "title":{
        "type": "text"
      },
      "description":{
        "type": "text"
      }
    }
  }
}

डेटा:

POST testindex6/_doc
{
  "title":  "dog",
  "description":"dog is brown"
}

<बी>1. Query_string best_fields(डिफ़ॉल्ट)

किसी भी फ़ील्ड से मेल खाने वाले दस्तावेज़ ढूंढता है, लेकिन सबसे अच्छे फ़ील्ड से _score का उपयोग करता है

GET testindex6/_search?explain=true
{
  "query": {
    "query_string": {
      "default_field": "*",
      "query": "dog brown",
      "type":"best_fields"
    }
  }
}

नतीजा:

  "_explanation" : {
          "value" : 0.5753642,
          "description" : "max of:",
          "details" : [
            {
              "value" : 0.5753642,
              "description" : "sum of:",              
            },
            {
              "value" : 0.2876821,
              "description" : "sum of:",              
            }
          ]
        }   

Best_fields मिलान किए गए फ़ील्ड से अधिकतम स्कोर लेता है

<बी>2. Query_string अधिकांश_फ़ील्ड

Does sum of scores from matched fields
GET testindex6/_search?explain=true
{
  "query": {
    "query_string": {
      "default_field": "*",
      "query": "dog brown",
      "type":"most_fields"
    }
  }
}

नतीजा

"_explanation" : {
          "value" : 0.8630463,
          "description" : "sum of:",
          "details" : [
            {
              "value" : 0.5753642,
              "description" : "sum of:"
              ....
            },
            {
              "value" : 0.2876821,
              "description" : "sum of:"              
              ....
            }
          ]
        }
      }

<बी>3. Simple_Query_String

जिज्ञासा

GET testindex6/_search?explain=true
{
  "query": {
    "simple_query_string": {
      "query": "dog brown",
      "fields": ["*"]
    }
  }
}

नतीजा:

"_explanation" : {
          "value" : 0.8630463,
          "description" : "sum of:",
          "details" : [
            {
              "value" : 0.5753642,
              "description" : "sum of:",              
            },
            {
              "value" : 0.2876821,
              "description" : "sum of:"              
            }
          ]
        }
      }

तो आप देख सकते हैं कि अधिकांश_फ़ील्ड और simple_query_string में स्कोर समान है (दोनों का योग है)। लेकिन उनमें अंतर है। नीचे दिए गए सूचकांक पर विचार करें

मैंने टाइप टेक्स्ट और सबफ़ील्ड दाद के साथ दाद विश्लेषक के साथ एक फ़ील्ड शीर्षक बनाया है।

PUT index_2
{
  "settings": {
    "analysis": {
      "analyzer": {
        "analyzer_shingle": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "shingle"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "fields": {
          "shingles": {
            "search_analyzer": "analyzer_shingle",
            "analyzer": "analyzer_shingle",
            "type": "text"
          }
        }
      }
    }
  }
}

आंकड़े:

POST index_2/_doc
{
  "title":"the brown fox"
}

<बी>1. अधिकांश_फ़ील्ड जिज्ञासा:

GET index_2/_search?explain=true
{
  "query": {
    "query_string": {
      "query": "brown fox",
      "fields": ["*"],
      "type":"most_fields"
    }
  }
}

नतीजा:

"_explanation" : {
          "value" : 1.3650365,
          "description" : "sum of:",
          "details" : [
            {
              "value" : 0.7896724,
              "description" : "sum of:",              
            },
            {
              "value" : 0.5753642,
              "description" : "sum of:",              
            }
          ]
        }

<बी>2. Simple_Query_string जिज्ञासा

GET index_2/_search?explain=true
{
  "query": {
    "simple_query_string": {
      "query": "brown fox",
      "fields": ["*"]
    }
  }
}

नतीजा:

"_explanation" : {
          "value" : 1.2632996,
          "description" : "sum of:",
          "details" : [
            {
              "value" : 0.6316498,
              "description" : "sum of:",              
            },
            {
              "value" : 0.6316498,
              "description" : "sum of:"              
            }
          ]
        }
      }

यदि आप देखेंगे कि स्कोर अधिकांश_फ़ील्ड और simple_query_string में भिन्न है, भले ही दोनों स्कोर का योग करते हों।

कारण यह है कि अधिकांश_फ़ील्ड क्वेरी करते समय फ़ील्ड के विश्लेषक का उपयोग करते हैं, याद रखें शीर्षक (मानक) और शीर्षक दाद (analyzer_shingle) के अलग-अलग विश्लेषक होते हैं जबकि simple_query_string सभी क्षेत्रों के लिए अनुक्रमणिका (मानक) के डिफ़ॉल्ट विश्लेषक का उपयोग करते हैं।

यदि हम अधिकांश_फ़ील्ड को क्वेरी करेंगे और इसे मानक विश्लेषक का उपयोग करने के लिए बाध्य करेंगे तो आप एक ही प्रश्न का स्कोर करेंगे:

GET index_2/_search?explain=true
{
  "query": {
    "query_string": {
      "query": "brown fox",
      "fields": ["*"],
      "type":"most_fields",
      "analyzer": "standard"-->instead of field analyzer respectively use standard for all
    }
  }
}

नतीजा:

"_explanation" : {
          "value" : 1.2632996,
          "description" : "sum of:"
          "details" : [
            {
              "value" : 0.6879354,
              "description" : "sum of:"
            },
            {
              "value" : 0.5753642,
              "description" : "sum of:"              
            }
          ]
        }

Simple_query_string मुझे लगता है कि सरल परिदृश्यों के लिए है, यदि आप अलग-अलग क्षेत्रों के लिए अलग-अलग विश्लेषक का उपयोग कर रहे हैं तो simple_query_string या बूल- मिलान क्वेरी का उपयोग करें

0
jaspreet chahal 11 अप्रैल 2020, 09:05