我可以使用Lucene查看“查询”是否与单词匹配?

时间:2017-06-03 00:27:44

标签: lucene

query_text = "Justin Beiber";(比伯写错了)

word = "Bieber";

boolean results = does_match(query_text, word);

注意:“Justin Beiber”和“Bieber”都不在Lucene文件中

1 个答案:

答案 0 :(得分:0)

如果不构建实际运行查询的索引,我就不知道有什么事情可以做到这一点。但是,您可以非常轻松地在内存中创建临时索引。您需要为这样的方法提供至少an analyzer

所以你可以像这样创建一个doMatch方法:

public static boolean doesMatch(String query, String doctext, Analyzer analyzer) throws IOException, ParseException {
    Directory dir = new RAMDirectory();
    IndexWriterConfig config = new IndexWriterConfig(analyzer);
    IndexWriter writer = new IndexWriter(dir, config);
    Document doc = new Document();
    doc.add(new TextField("text", doctext, Field.Store.NO));
    writer.addDocument(doc);
    writer.close();

    IndexReader reader = DirectoryReader.open(dir);
    IndexSearcher searcher = new IndexSearcher(reader);
    QueryParser parser = new QueryParser("text", analyzer);
    Query parsedQuery = parser.parse(query);
    TopDocs results = searcher.search(parsedQuery, 1);

    reader.close();
    dir.close();

    return results.totalHits == 1;
}
相关问题