लोचदार में उपसर्ग खोजना बहुत सीधा लगता है (विश्लेषक के साथ खेलना)। दस्तावेज़ों से, अगर मैं अपनी अनुक्रमणिका में quick brown fox ढूंढना चाहता हूं तो मैं ऐसा कुछ करूंगा:

{
  "query": {
    "match_phrase_prefix": {
      "message": {
        "query": "quick brown f"
      }
    }
  }
}

महान! लेकिन, क्या होगा अगर मेरी अनुक्रमणिका में मूल्य quick brown f था और मैं इसके साथ खोज रहा था

{
  "query": {
    "match_phrase_prefix": {
      "message": {
        "query": "quick brown fox"
      }
    }
  }
}

मैं अभी भी गति के लिए एक उपसर्ग अनुक्रमणिका के लाभों का उपयोग करना चाहता हूं लेकिन अनुक्रमणिका प्रविष्टि अन्य तरीकों के बजाय खोज का एक उपसर्ग है।

जो मैं पूरा करने की कोशिश कर रहा हूं वह आंशिक आईडी मिलान है, मेरी आईडी में संख्याओं का क्रम महत्वपूर्ण है और मैं जो करना चाहता हूं वह आंशिक मिलान वाले किसी भी आईडी मान को तुरंत पहचानना है। अर्थात्:

12345678 के लिए खोज करना इंडेक्स एंट्री 1234567890 (जो एक साधारण उपसर्ग खोज है) से मेल खाना चाहिए, लेकिन इंडेक्स में 12345 से भी मेल खाना चाहिए (जो कि ऊपर परिभाषित किया गया उपयोग-मामला है)। इस सूचकांक में लाखों आइटम होंगे और गति यहां महत्वपूर्ण है इसलिए मैं उत्सुक था कि क्या उपसर्ग सेटिंग्स या कुछ और का उपयोग करके इसे सेट करने का कोई तरीका है। मैं रेगेक्स या इसी तरह के ऊपरी हिस्से से बचने की उम्मीद कर रहा था लेकिन अगर ऐसा है तो काफी उचित है।

0
DataMacGyver 29 जुलाई 2020, 09:44

1 उत्तर

ठीक है, मुझे लगता है कि मैं एक अलग रास्ते पर जा सकता हूं। हमारी आईडी को संख्यात्मक रूप से व्यक्त किया जा सकता है, इसलिए इस मामले में यदि मेरे पास एक सूचकांक मूल्य था:

12345

एक आईडी मान की अधिकतम लंबाई दस होने के साथ वास्तविकता में मैं आबादी वाले अंकों के बावजूद, किसी भी चीज़ के लिए परिमाण का समान क्रम प्राप्त करने के लिए आईडी को 0s के साथ पैड कर सकता हूं। उदाहरण के लिए, उपरोक्त बन जाएगा:

1234500000

जबकि 12345678 1234567800 बन जाएगा।

पहले उदाहरण के लिए, उपसर्ग साझा करने वाली कोई भी चीज़ 1234500000 और 1234599999 के बीच होगी।

इसलिए न्यूनतम और अधिकतम आईडी मानों की सीमा ओवरलैप होने पर जांच करके मैं किसी भी मामले के लिए अपनी अनुक्रमणिका खोज सकता हूं।

तो मेरी खोज बस होगी:

{
        "query": {
            "bool": {
                "should": [{
                    "range": {
                        "min_poss_value": {
                            "gte": min_value_to_search,
                            "lte": max_value_to_search
                        }
                    }}, {
                    "range": {
                        "max_poss_value": {
                            "gte": min_value_to_search,
                            "lte": max_value_to_search
                        }
                    }
                }
                ],
                "minimum_should_match": 1
            }
        }
    }

...और नहीं, मैंने आईडी सिस्टम डिजाइन नहीं किया, मैं केवल यहां काम करता हूं।

0
Robert Mansfield 29 जुलाई 2020, 18:33