我試圖使用Apache Lucene製作可搜索的電話/本地商業目錄。Lucene:多詞詞組作爲搜索詞
我有街道名稱,企業名稱,電話號碼等字段。我遇到的問題是,當我嘗試通過街道搜索街道名稱有多個詞(如'新月'),沒有結果被返回。但是,如果我只用一個詞搜索,例如'新月',我就可以得到我想要的所有結果。
我用下面的索引數據:
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();
我搜索這樣的工作:
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;
我試圖交換通配符查詢短語查詢,先用整字符串,然後將字符串分割到空白區域,然後用下面的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);
但是,這沒有奏效。我嘗試使用KeywordAnalyzer而不是StandardAnalyzer,但其他所有類型的搜索都停止了。我嘗試用其他字符(+和@)替換空格,並將查詢轉換爲和從此表單中轉換,但這仍然無效。我認爲它不起作用,因爲+和@是沒有索引的特殊字符,但我似乎無法找到任何字符的列表。
我開始有點生氣了,有人知道我在做什麼錯嗎?
感謝, 裏克
特殊字符可以在這裏找到:http://lucene.apache.org/core/3_5_0/queryparsersynta x.html#N10180。 – Oliver 2016-05-27 10:53:46