2010-03-09 12 views
6

प्रत्येक ल्यूसीन दस्तावेज़ एक नुस्खा है, और इनमें से प्रत्येक व्यंजनों में अवयव हैं।एक ही प्रकृति के कई क्षेत्रों के साथ ल्यूसीन इंडेक्स

मैं सामग्री खोजने में सक्षम होने की दिशा में काम कर रहा हूं और परिणाम देता हूं जो कि दो सामग्री से मेल खाता है। (उदाहरण के लिए)

तो मैं डॉक्टर को सामग्री कैसे जोड़ सकता हूं? सोलर में मैं केवल कई फ़ील्ड बना सकता हूं और यह उन सभी को बचाएगा, मैं कुछ गलत कर रहा हूं क्योंकि यह केवल एक घटक को सहेज रहा है।

यह भी 'टैग' जैसे फ़ील्ड पर लागू होगा।

p.s Im इसके लिए ज़ेंड फ्रेमवर्क का उपयोग करते हुए, यदि यह बिल्कुल मायने रखता है।

उत्तर

12

लुसीन दस्तावेज एक ही नाम के कई क्षेत्रों के अतिरिक्त समर्थन का समर्थन करते हैं। यानी आप बार-बार फोन कर सकते हैं:

document.add(new Field("name"), value) 

तो तुम क्या करने के लिए इस प्रकार थे:

# (pseudo-code) 
document1.add(new Field("ingredient"), "vanilla") 
document1.add(new Field("ingredient"), "strawberry") 
index.add(document) 

# And then search for 
index.search("ingredient", "vanilla" && "strawberry") 

आप Document1 वापस मिल जाएगा। लेकिन अगर आप के लिए खोज:

index.search("ingredient", "vanilla" && "apple") 

आप वापस Document1 नहीं मिलेगा।

यदि आप के लिए खोज:

index.search("ingredient", "vanilla" || "apple") 

तुम भी वापस Document1 मिलेगा।

यदि आप देखना चाहते हैं कि कौन से तत्व मिलते हैं तो आप दस्तावेज़ पर फ़ील्ड को संग्रहीत कर सकते हैं फ़ील्ड, और फिर प्रत्येक मिलान दस्तावेज़ के लिए फ़ील्ड की सूची पुनर्प्राप्त करें और उन्हें उपयोगकर्ता क्वेरी से तुलना करें।

यह भी ध्यान दें कि डिफ़ॉल्ट रूप से स्थिति इंक्रूममेंट गैप दस्तावेज़ में जोड़े गए समान नाम वाले फ़ील्ड के लिए 0 है।

इसका मतलब यह है कि यदि आप कहा:

document1.add(new Field("ingredient"), "chocolate") 
    document1.add(new Field("ingredient"), "orange") 

तो यह माना जाएगा जैसे कि यह एक एकल घटक "चॉकलेट नारंगी" जिस पर मेल करने वाले बुलाया थे:

index.search("ingredient", "chocolate orange") 

आप बच सकते हैं यह PositionIncrementGap> 1 के लिए एक मान सेट करता है, जो उपज करेगा:

0 के लिए मिलान:

index.search("ingredient", "chocolate orange") 

और 1 मैच के लिए:

index.search("ingredient", "chocolate" && "orange") 
0

मैं यहाँ दो संभावित दृष्टिकोण देखें:

  1. अपने डेटा denormalize - एक नुस्खा एक आम नुस्खा आईडी के लिए दस्तावेजों के सभी दे रही है एक निर्माण विधि में घटक के लिए एक अलग दस्तावेज़ बनाते हैं,। फिर, खोज के दौरान, एक नुस्खा आईडी के सभी मैच कुल मिलाकर। थोड़ा बदसूरत
  2. अपने सभी अवयवों को एक सामान्य क्षेत्र में संयोजित करें, और इसे 'टेक्स्ट' के रूप में अनुक्रमणित करें। फिर 'OR' के साथ एक बूलियन क्वेरी का उपयोग करके सामग्री की खोज करें (इसे जावा ल्यूसीन शब्दों में 'चाहिए' कहा जाता है, मुझे PHP समकक्ष नहीं पता है)।

मेरा सुझाव है कि आप दूसरे दृष्टिकोण को आज़माएं और देखें कि यह मदद करता है या नहीं।

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