Apache Lucene'yi kullanarak aranabilir bir telefon/yerel işletme dizini oluşturmaya çalışıyorum.Lucene: Arama terimleriyle ilgili çok sözcüklü deyimler
Sokak adı, işletme adı, telefon numarası vb. Için alanlarım var. Karşılaştığım sorun, cadde adında birden çok kelimeye (örneğin, 'hilal') sahip olduğu caddede arama yapmaya çalıştığımda sorun yok. sonuçlar geri döndü. Ama sadece bir kelime ile arama yapmaya çalışırsam, örneğin 'hilal', istediğim tüm sonuçları alırım.
aşağıdaki ile veri indeksleme ediyorum:
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();
Benim aramalar
böyle çalışır: Bir ifade sorgusu için joker sorgusu takas denediint 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;
, ilk tamamı ile dize ve sonra beyaz alan üzerinde dize kadar bölme ve bunun gibi bir BooleanQuery onları sarma:
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);
Ancak, bu işe yaramadı. StandardAnalyzer yerine bir KeywordAnalyzer kullanmayı denedim, ancak diğer tüm arama türleri de çalışmayı bıraktı. Boşlukları diğer karakterlerle (+ ve @) değiştirmeyi ve sorguları bu formata dönüştürmeyi denedim, ancak bu hala çalışmıyor. Bence işe yaramıyor çünkü + ve @ indekslenmemiş özel karakterler. Ama hangi karakterlerin olduğu gibi bir liste bulamıyorum.
Biraz kızmaya başlıyorum, yanlış yaptığımı bilen var mı?
sayesinde Rik
Özel karakter burada bulabilirsiniz gerçekleştirir olacak x.html # N10180. – Oliver