2013-09-07 17 views
5

मैं कुछ विशेषताओं जैसे nGrams और समानार्थी काम करने की कोशिश कर रहा हूं लेकिन मुझे कोई भाग्य नहीं है।लोचदार खोज आंशिक खोज मिलान

मैं this blog post का अनुसरण कर रहा हूं। मैंने अपने डेटा में मैपिंग और प्रश्नों को अपनाने का प्रयास किया है, और यह केवल सटीक शर्तों से मेल खाएगा। मैंने उसी परिणाम के साथ this gist से आलेख से सटीक डेटा का उपयोग करने का भी प्रयास किया।

यहाँ मानचित्रण है:

{ 
    "size":20, 
    "from":0, 
    "sort":[ 
     "_score" 
    ], 
    "query": { 
     "bool": { 
     "should":[ 
      { 
       "text": { 
        "productName": { 
        "boost":5, 
        "query":"test query", 
        "type":"phrase" 
        } 
       } 
      }, 
      { 
       "text": { 
        "productName.partial": { 
        "boost":1, 
        "query":"test query" 
        } 
       } 
      }, 
      { 
       "text": { 
        "productName.partial_middle": { 
        "boost":1, 
        "query":"test query" 
        } 
       } 
      }, 
      { 
       "text": { 
        "productName.partial_back": { 
        "boost":1, 
        "query":"test query" 
        } 
       } 
      } 
     ] 
     } 
    } 
} 

सार से ऊपर क्वेरी का उपयोग करता है, तो मैं:

{ 
    "mappings": { 
     "item": { 
     "properties": { 
      "productName": { 
       "fields": { 
        "partial": { 
        "search_analyzer":"full_name", 
        "index_analyzer":"partial_name", 
        "type":"string" 
        }, 
        "partial_back": { 
        "search_analyzer":"full_name", 
        "index_analyzer":"partial_name_back", 
        "type":"string" 
        }, 
        "partial_middle": { 
        "search_analyzer":"full_name", 
        "index_analyzer":"partial_middle_name", 
        "type":"string" 
        }, 
        "productName": { 
        "type":"string", 
        "analyzer":"full_name" 
        } 
       }, 
       "type":"multi_field" 
      }, 
      "productID": { 
       "type":"string", 
       "analyzer":"simple" 
      }, 
      "warehouse": { 
       "type":"string", 
       "analyzer":"simple" 
      }, 
      "vendor": { 
       "type":"string", 
       "analyzer":"simple" 
      }, 
      "productDescription": { 
       "type":"string", 
       "analyzer":"full_name" 
      }, 
      "categories": { 
       "type":"string", 
       "analyzer":"simple" 
      }, 
      "stockLevel": { 
       "type":"integer", 
       "index":"not_analyzed" 
      }, 
      "cost": { 
       "type":"float", 
       "index":"not_analyzed" 
      } 
     } 
     }, 
     "settings": { 
     "analysis": { 
      "filter": { 
       "name_ngrams": { 
        "side":"front", 
        "max_gram":50, 
        "min_gram":2, 
        "type":"edgeNGram" 
       }, 
       "name_ngrams_back": { 
        "side":"back", 
        "max_gram":50, 
        "min_gram":2, 
        "type":"edgeNGram" 
       }, 
       "name_middle_ngrams": { 
        "type":"nGram", 
        "max_gram":50, 
        "min_gram":2 
       } 
      }, 
      "analyzer": { 
       "full_name": { 
        "filter":[ 
        "standard", 
        "lowercase", 
        "asciifolding" 
        ], 
        "type":"custom", 
        "tokenizer":"standard" 
       }, 
       "partial_name": { 
        "filter":[ 
        "standard", 
        "lowercase", 
        "asciifolding", 
        "name_ngrams" 
        ], 
        "type":"custom", 
        "tokenizer":"standard" 
       }, 
       "partial_name_back": { 
        "filter":[ 
        "standard", 
        "lowercase", 
        "asciifolding", 
        "name_ngrams_back" 
        ], 
        "type":"custom", 
        "tokenizer":"standard" 
       }, 
       "partial_middle_name": { 
        "filter":[ 
        "standard", 
        "lowercase", 
        "asciifolding", 
        "name_middle_ngrams" 
        ], 
        "type":"custom", 
        "tokenizer":"standard" 
       } 
      } 
     } 
     } 
    } 
} 

और खोज प्रश्न (मैं और अधिक परिणाम देने के प्रयास करने के लिए फिल्टर हटा दिया) पहले बूल क्वेरी

"text":{ 
    "productName":{ 
     "boost":5, 
     "query":"test query", 
     "type":"phrase" 
    } 
} 

से निम्न कोड को हटा दें, इसलिए यह सीधे मिलान नहीं करेगा, n ओ मेरी खोज शब्द क्या है, मैं अभी भी कोई परिणाम नहीं लौटाता हूं।

मुझे लगता है कि मुझे कुछ चमकदार रूप से स्पष्ट याद आ रही है, और वास्तव में यह नहीं पता कि अन्य जानकारी क्या प्रासंगिक है, इसलिए कृपया इसे आसान बनाएं।

+0

क्या आप अपना मानचित्रण कृपया पोस्ट कर सकते हैं! 'curl http: // domain.com/index/type/_mapping' बस इसे सही तरीके से सेट अप करने के लिए जांचें। – ramseykhalaf

+1

इसके अलावा 'टेक्स्ट' बहिष्कृत है,' मिलान' का उपयोग करें! – ramseykhalaf

+0

@ramseykhalaf आपने इसे हल किया है, मैंने पहले मैपिंग खींचा है और जेसन को देखा है और मान लीजिए कि यह सही था, लेकिन वास्तव में इसे देखकर मैंने देखा कि यह सब गड़बड़ हो गया था। मैं आपको जवाब में जवाब दूंगा! – Rockstar04

उत्तर

5

ऐसा लगता है कि मैंने अपनी समस्या का जवाब निकाला, अंधेरे से कॉपी और चिपकाया। मेरे द्वारा लिंक किया गया ब्लॉग आलेख पुराना प्रतीत होता है, और आदेशों के लिए JSON अब सही तरीके से काम नहीं करता है (लेकिन आदेश भेजते समय त्रुटियों को फेंक नहीं दिया गया है)।

{ 
    "settings": { 
     "analysis": { 
     "filter": { 
      "name_ngrams": { 
       "side":"front", 
       "max_gram":50, 
       "min_gram":2, 
       "type":"edgeNGram" 
      }, 
      "name_ngrams_back": { 
       "side":"back", 
       "max_gram":50, 
       "min_gram":2, 
       "type":"edgeNGram" 
      }, 
      "name_middle_ngrams": { 
       "type":"nGram", 
       "max_gram":50, 
       "min_gram":2 
      } 
     }, 
     "analyzer": { 
      "full_name": { 
       "filter":[ 
        "standard", 
        "lowercase", 
        "asciifolding" 
       ], 
       "type":"custom", 
       "tokenizer":"standard" 
      }, 
      "partial_name": { 
       "filter":[ 
        "standard", 
        "lowercase", 
        "asciifolding", 
        "name_ngrams" 
       ], 
       "type":"custom", 
       "tokenizer":"standard" 
      }, 
      "partial_name_back": { 
       "filter":[ 
        "standard", 
        "lowercase", 
        "asciifolding", 
        "name_ngrams_back" 
       ], 
       "type":"custom", 
       "tokenizer":"standard" 
      }, 
      "partial_middle_name": { 
       "filter":[ 
        "standard", 
        "lowercase", 
        "asciifolding", 
        "name_middle_ngrams" 
       ], 
       "type":"custom", 
       "tokenizer":"standard" 
      } 
     } 
     } 
    }, 
    "mappings" : { 
     "product": { 
     "properties": { 
      "productName": { 
       "fields": { 
        "partial": { 
        "search_analyzer":"full_name", 
        "index_analyzer":"partial_name", 
        "type":"string" 
        }, 
        "partial_back": { 
        "search_analyzer":"full_name", 
        "index_analyzer":"partial_name_back", 
        "type":"string" 
        }, 
        "partial_middle": { 
        "search_analyzer":"full_name", 
        "index_analyzer":"partial_middle_name", 
        "type":"string" 
        }, 
        "productName": { 
        "type":"string", 
        "analyzer":"full_name" 
        } 
       }, 
       "type":"multi_field" 
      }, 
      "productID": { 
       "type":"string", 
       "analyzer":"simple" 
      }, 
      "warehouse": { 
       "type":"string", 
       "analyzer":"simple" 
      }, 
      "vendor": { 
       "type":"string", 
       "analyzer":"simple" 
      }, 
      "productDescription": { 
       "type":"string", 
       "analyzer":"full_name" 
      }, 
      "categories": { 
       "type":"string", 
       "analyzer":"simple" 
      }, 
      "stockLevel": { 
       "type":"integer", 
       "index":"not_analyzed" 
      }, 
      "cost": { 
       "type":"float", 
       "index":"not_analyzed" 
      } 
     } 
     } 
    } 
} 

यहाँ कोड मैं (मैं यह 3 बार इस्तेमाल के साथ थोड़ा डेटा बदल)

{ 
    "productName": "Thingey", 
    "productID": "asdfasef9816", 
    "warehouse": "usa", 
    "vendor": "Cool Things Inc", 
    "productDescription": "This is a cool gizmo", 
    "categories": "Cool Things", 
    "stockLevel": 6, 
    "cost": 15.31 
} 
एक परीक्षण रिकॉर्ड सम्मिलित किया जाता है:

यहाँ सूचकांक मैं इस्तेमाल किया बनाने के लिए कोड है

और अंततः खोज क्वेरी के लिए JSON।

{ 
    "size":20, 
    "from":0, 
    "sort":[ 
     "_score" 
    ], 
    "query": { 
     "bool": { 
     "should":[ 
      { 
       "text": { 
        "productName.partial": { 
        "boost":1, 
        "query":"ing" 
        } 
       } 
      }, 
      { 
       "text": { 
        "productName.partial_middle": { 
        "boost":1, 
        "query":"ing" 
        } 
       } 
      }, 
      { 
       "text": { 
        "productName.partial_back": { 
        "boost":1, 
        "query":"ing" 
        } 
       } 
      } 
     ] 
     } 
    } 
} 

मुझे जो मुख्य परिवर्तन करना है, वह मैपिंग्स से सेटिंग को इंडेक्स निर्माण में स्थानांतरित करना होगा। मैंने यहां प्रारंभिक मैपिंग परिभाषा भी ले जाया, लेकिन यह नियमित/इंडेक्स/आइटम/_मैपिंग पुट का उपयोग करके बनाया जा सकता था।

यदि किसी भी लोचदार खोज पेशेवर इस मुद्दे के भविष्य के पाठकों के लिए इसका विस्तार करना चाहते हैं तो कृपया करें।

+0

मैं इस जवाब को स्वीकार करने जा रहा हूं क्योंकि यह मेरे विशिष्ट मुद्दे को हल करता है, लेकिन कृपया, जो भी इस उत्तर को जोड़ और बेहतर कर सकता है कृपया करें! – Rockstar04

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