私はLuceneをアプリケーションに統合しようとしています。 Luceneは現在、「アップロード」を検索していて、ドキュメントに「アップロード」というテキストがあり、それがうまく動作していますが、「Uplo」を検索すると機能しません。何か案は?Lucene:部分的な単語で検索
コード:
Directory directory = FSDirectory.open(path);
IndexReader indexReader = DirectoryReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
QueryParser queryParser = new QueryParser("contents", new SimpleAnalyzer());
Query query = queryParser.parse(text);
TopDocs topDocs = indexSearcher.search(query, 50);
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
org.apache.lucene.document.Document document = indexSearcher.doc(scoreDoc.doc);
objectIds.add(Integer.valueOf(document.get("id")));
System.out.println("");
System.out.println("id " + document.get("id"));
System.out.println("content " + document.get("contents"));
}
return objectIds;
はありがとうございます。
ありがとう、私はそれを確認します、現在それはワイルドカード文字で動作していますが、検索フレーズが数字を含むたびに、私は結果を戻していません。何か案は?ありがとうございました。 –
はい、Luceneの場合、トークンはトークンですが、そのすべて英語か英数字かは関係ありません。たとえあなたのトークンに番号が含まれていても、例えばBond777を検索して777を検索すると、NGramを使用した場合、Bond777が結果として得られます。ここでの利点は、 'nd77'のような真ん中の文字を検索することもでき、正しい結果が得られることです。しかし、私が言ったように、これはすべて、より高い空間の複雑さを犠牲にしている。ワイルドカードの位置に基づいたワイルドカードクエリは、時間の複雑さが増し、適切な場所に「*」を挿入する必要があります。 – Yavar
現在、すべてのインデックスが作成され、クロールとインデックス作成に時間がかかっていたため、インデックス作成メカニズムを変更するために多くの変更が必要でした。しかし、ワイルドカードの場合、私は777の結果を得るのではなく、777BondまたはBondの結果を得る。 –