मैं अपाचे ल्यूसीन का उपयोग करके एक खोजने योग्य फोन/स्थानीय व्यापार निर्देशिका बनाने की कोशिश कर रहा हूं।लुसीन: खोज शब्द के रूप में मल्टी-शब्द वाक्यांश
मेरे पास सड़क का नाम, व्यवसाय का नाम, फोन नंबर आदि के लिए फ़ील्ड हैं। मेरी समस्या यह है कि जब मैं सड़क से खोज करने की कोशिश करता हूं जहां सड़क के नाम में कई शब्द होते हैं (जैसे 'क्रिसेंट'), नहीं परिणाम लौटाए जाते हैं। लेकिन अगर मैं सिर्फ एक शब्द के साथ खोज करने की कोशिश करता हूं, उदाहरण के लिए 'क्रिसेंट', मुझे वह सभी परिणाम मिलते हैं जो मैं चाहता हूं।
मैं निम्नलिखित के साथ डेटा का अनुक्रमण कर रहा हूँ: पूरे के साथ, पहले
int numberOfHits = 200;
String LocationOfDirectory = "C:\\dir\\index";
TopScoreDocCollector collector = TopScoreDocCollector.create(numberOfHits, true);
Directory directory = new SimpleFSDirectory(new File(LocationOfDirectory));
IndexSearcher searcher = new IndexSearcher(IndexReader.open(directory);
WildcardQuery q = new WildcardQuery(new Term("Street", "the crescent");
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
मैं एक वाक्यांश क्वेरी के लिए वाइल्डकार्ड क्वेरी की अदला-बदली की कोशिश की है:
String LocationOfDirectory = "C:\\dir\\index";
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_34);
Directory Index = new SimpleFSDirectory(LocationOfDirectory);
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE.34, analyzer);
IndexWriter w = new IndexWriter(index, config);
Document doc = new Document();
doc.add(new Field("Street", "the crescent", Field.Store.YES, Field.Index.Analyzed);
w.add(doc);
w.close();
मेरे खोज इस तरह काम करते हैं स्ट्रिंग और फिर सफेद स्थान पर स्ट्रिंग को विभाजित करना और उन्हें एक BooleanQuery में लपेटना:
String term = "the crescent";
BooleanQuery b = new BooleanQuery();
PhraseQuery p = new PhraseQuery();
String[] tokens = term.split(" ");
for(int i = 0 ; i < tokens.length ; ++i)
{
p.add(new Term("Street", tokens[i]));
}
b.add(p, BooleanClause.Occur.MUST);
हालांकि, यह काम नहीं किया। मैंने मानक विश्लेषक के बजाय एक कीवर्ड विश्लेषक का उपयोग करने का प्रयास किया, लेकिन फिर अन्य सभी प्रकार की खोजों ने भी काम करना बंद कर दिया। मैंने अन्य पात्रों (+ और @) के साथ रिक्त स्थान बदलने की कोशिश की है, और इस फ़ॉर्म से और प्रश्नों को परिवर्तित कर दिया है, लेकिन यह अभी भी काम नहीं करता है। मुझे लगता है कि यह काम नहीं करता है क्योंकि + और @ विशेष वर्ण हैं जिन्हें अनुक्रमित नहीं किया गया है, लेकिन मुझे ऐसी सूची नहीं मिल रही है, जिनमें से कौन से पात्र इस तरह हैं।
मुझे थोड़ा पागल होना शुरू हो रहा है, क्या किसी को पता है कि मैं क्या गलत कर रहा हूं?
धन्यवाद, रिक
विशेष वर्ण यहां पाया जा सकता: http://lucene.apache.org/core/3_5_0/queryparsersynta x.html # N10180। – Oliver