2014-04-24 20 views
5

हमें अपनी अनुक्रमणिका में एक title क्षेत्र भंडारण कर रहे हैं और दो उद्देश्यों के लिए क्षेत्र का उपयोग करना चाहते:Elasticsearch में विश्लेषण/टोकनयुक्त क्षेत्र को कैसे क्रमबद्ध करें?

  1. हम एक ngram फिल्टर के साथ विश्लेषण कर रहे हैं तो हम स्वत: पूर्ण प्रदान कर सकते हैं और तुरंत परिणाम
  2. हम करना चाहते हैं स्कोर के बजाय title फ़ील्ड पर एक एएससी सॉर्ट का उपयोग करके परिणाम सूचीबद्ध करने में सक्षम हो।

सूचकांक/फिल्टर/विश्लेषक तो तरह परिभाषित किया गया है:

array(
    'number_of_shards' => $this->shards, 
    'number_of_replicas' => $this->replicas, 
    'analysis' => array(
     'filter' => array(
      'nGram_filter' => array(
       'type' => 'nGram', 
       'min_gram' => 2, 
       'max_gram' => 20, 
       'token_chars' => array('letter','digit','punctuation','symbol') 
      ) 
     ), 

     'analyzer' => array(
      'index_analyzer' => array(
       'type' => 'custom', 
       'tokenizer' =>'whitespace', 
       'char_filter' => 'html_strip', 
       'filter' => array('lowercase','asciifolding','nGram_filter') 
      ), 
      'search_analyzer' => array(
       'type' => 'custom', 
       'tokenizer' =>'whitespace', 
       'char_filter' => 'html_strip', 
       'filter' => array('lowercase','asciifolding') 
      ) 
     ) 
    ) 
), 

समस्या हम सामना कर रहे हैं अप्रत्याशित परिणाम है जब title मैदान पर क्रमबद्ध हम। एक छोटे से खोज करने के बाद, हम ElasticSearch पर sort आदमी पृष्ठ के अंत में यह पाया ... (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html#_memory_considerations)

स्ट्रिंग आधारित प्रकार के लिए, मैदान पर हल कर विश्लेषण किया नहीं किया जाना चाहिए/tokenized।

हम दोनों क्षेत्र का विश्लेषण कैसे कर सकते हैं और बाद में इसे कैसे क्रमबद्ध कर सकते हैं? क्रमबद्ध करने के लिए हमें not_analyzed का उपयोग करके फ़ील्ड को दो बार स्टोर करने की आवश्यकता है? चूंकि क्षेत्र _sourcetitle मूल्य को मूल स्थिति में भी संग्रहीत कर रहा है, क्या इसका उपयोग सॉर्ट करने के लिए नहीं किया जा सकता है?

उत्तर

7

आप Elasticsearch में Multi Field Type की अंतर्निहित अवधारणा का उपयोग कर सकते हैं।

बहु_फील्ड प्रकार एक ही मूल्य के कई कोर_टीप्स को मैप करने की अनुमति देता है। यह बहुत आसान हो सकता है, उदाहरण के लिए, जब एक स्ट्रिंग प्रकार को मैप करना चाहते हैं, एक बार जब इसका विश्लेषण किया जाता है और एक बार जब यह नॉनलाइज्ड होता है।

लोचदार खोज संदर्भ में, कृपया String Sorting and Multi Fields पर विचार करें कि आपको क्या चाहिए इसकी स्थापना कैसे करें।

कृपया ध्यान दें कि मल्टी फील्ड मैपिंग कॉन्फ़िगरेशन Elasticsearch 0.90.X और 1.X के बीच बदल गया है। अपने संस्करण के आधार पर गाइड निम्नलिखित उचित उपयोग करें:

+1

मैं के लिए, धन्यवाद वास्तव में क्या देख रहा था! मैं विशेष रूप से एक ही स्ट्रिंग को दो तरीकों से अनुक्रमणित करने के लिए बेवकूफ दृष्टिकोण के बारे में इस बात से प्यार करता हूं कि आपके द्वारा लिंक किए गए किसी संबंधित पृष्ठ पर दस्तावेज़ में दो अलग-अलग फ़ील्ड शामिल करना होगा;) – oucil

+0

यदि आपके पास संग्रहीत शीर्षक का स्लग है , शायद यह एक "not_analyzed" फ़ील्ड है, इसलिए आप स्लग द्वारा सॉर्ट कर सकते हैं। – Liko

+0

क्या आप प्रश्न के दूसरे भाग के लिए उत्तर जानते हैं: "चूंकि फ़ील्ड _ स्रोत भी इसके मूल स्थिति में शीर्षक मान संग्रहीत कर रहा है, क्या इसका उपयोग सॉर्ट करने के लिए नहीं किया जा सकता है?" मैं उत्सुक हूं कि इस मामले में स्रोत मूल्य द्वारा आदेश देने की संभावना क्यों नहीं है? –

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