2013-06-20 6 views
5

में अपेक्षाकृत छोटे सूचकांक दस्तावेजों पर बड़े खोज प्रश्नों को संभालना मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां हम अपेक्षाकृत छोटे दस्तावेज़/वाक्यों को अनुक्रमित करते हैं, और हम इन दस्तावेजों को क्वेरी के रूप में बड़े दस्तावेज़ों का उपयोग करना चाहते हैं। यहाँ एक अपेक्षाकृत सरल उदाहरण है: मैं का अनुक्रमण कर रहा हूँ दस्तावेज़:ल्यूसीन

docId : 1 
text: "back to black" 

और मैं निम्नलिखित इनपुट का उपयोग क्वेरी करना चाहते हैं:

"Released on 25 July 1980, Back in Black was the first AC/DC album recorded without former lead singer Bon Scott, who died on 19 February at the age of 33, and was dedicated to him." 

Lucene में इस के लिए सबसे अच्छा तरीका क्या है? सरल उदाहरणों के लिए, जहां मैं जो पाठ खोजना चाहता हूं वह इनपुट क्वेरी है, इनपुट क्वेरी है, मुझे QueryParser.parse (QueryParser.escape (... मेरा बड़ा इनपुट ...) का उपयोग करने से अपने स्वयं के विश्लेषक + एक PhraseQuery का उपयोग करके बेहतर परिणाम मिलते हैं।)) - जो एक बड़ा बूलियन/टर्म क्वेरी बनाने के समाप्त होता है।

लेकिन मैं एक असली दुनिया उदाहरण के लिए एक PhraseQuery दृष्टिकोण का उपयोग करने की कोशिश नहीं कर सकते हैं, मुझे लगता है मैं ShingleAnalyzerWrapper की तरह एक शब्द एन-ग्राम दृष्टिकोण का उपयोग करने के लिए है, लेकिन के रूप में अपने इनपुट दस्तावेजों काफी बड़ा हो सकता है साहचर्य कठिन हो जाएगा संभाल करने के लिए ...

दूसरे शब्दों में, मैं अटक कर रहा हूँ और किसी भी विचार बहुत सराहना की जाएगी :)

पी एस मैंने इसका जिक्र नहीं किया लेकिन छोटे दस्तावेजों को अनुक्रमणित करने के साथ एक परेशान चीज में से एक यह भी है कि "मानदंड" के कारण -वृत्त (फ्लोट) केवल 1 बाइट पर एन्कोड किया जा रहा है, सभी 3-4 शब्द वाक्यों को समान मान मान मिलता है, इसलिए खोज "एबीसी" जैसे वाक्य एक ही स्कोर के साथ "एबीसी" और "एबीसीडी" परिणाम दिखाते हैं।

धन्यवाद!

उत्तर

2

मुझे नहीं पता कि आपके पास कितने वाक्यों हैं, लेकिन आप समस्या को उलटा करना चाहते हैं: अपने वाक्यों को क्वेरी के रूप में संग्रहीत करें, transient in-memory index में आने वाले दस्तावेज़ों को सूचीबद्ध करें और मिलान करने वाले लोगों को ढूंढने के लिए अपने सभी प्रश्नों को चलाएं।

(नोट: यह कैसे Elasticsearch के percolator काम करता है।)

संपादित करें (2013-06-21):

आप वाक्य की एक बहुत बड़ी संख्या है, तो यह अभी भी करने के लिए बेहतर हो सकता है एक सूचकांक में वाक्य संग्रह। लेकिन वाक्यांश प्रश्नों का उपयोग करने के बजाय, आप लुसेन के ShingleFilter का उपयोग करके इंडेक्स करने का प्रयास कर सकते हैं। क्वेरी समय पर, क्वेरीपर्सर का उपयोग करने के बजाय मैन्युअल रूप से क्वेरी बनाने के लिए आपका दृष्टिकोण अच्छा है, लेकिन यदि आप शिंगल को इंडेक्स करते हैं, तो आप केवल शुद्ध बूलियन क्वेरी बना सकते हैं जहां प्रत्येक खंड एक वाक्यांश क्वेरी के बजाय एक शिंगल से मेल खाता है।

+0

हाँ, मैंने इसके बारे में सोचा लेकिन मेरे पास 200k से अधिक वाक्यों का मिलान है, मेरे पहले परीक्षण (इन-मेमोरी इंडेक्स का उपयोग किए बिना) काफी धीमे थे। लेकिन हो सकता है कि यह सही दृष्टिकोण है, मैं जांचूंगा कि लोचदार खोज कैसे करता है :), क्या आपको लगता है कि मैं उचित क्वेरीिंग के साथ इसे अन्य तरीके से काम नहीं कर सकता? –

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