【发布时间】:2010-07-28 23:10:31
【问题描述】:
我在 JAVA 中使用 Lucene,并根据公司名称在我们的数据库中索引一个表。在索引之后,我希望对我们希望输入数据库的值进行模糊匹配(Levenshtein 距离)。原因是我们不想因为拼写错误而被骗。
例如,如果我的公司名称为“Widget Makers XYZ”,我不想插入“Widget Maker XYZ”。
从我读到的 Lucene 的模糊匹配算法应该给我一个介于 0 和 1 之间的数字,我想做一些测试,然后确定和足够的值让我们确定什么是有效的或无效的。
问题是我被卡住了,在互联网上到处搜索后,需要 StackOverflow 社区的帮助。
就像我说的,我已经索引了公司名称的数据库,然后有以下代码:
IndexSearcher searcher = new IndexSearcher(directory);
new QueryParser(Version.LUCENE_30, "company", analyzer);
Query fuzzy_query = new FuzzyQuery(new Term("company", "Center"));
后来遇到这个问题,基本不知道怎么获取模糊匹配值。我知道代码必须如下所示,但是似乎没有收集器适合我的需求。 (如你所见,我现在只能计算匹配的数量,这对我来说没用)
TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
searcher.search(fuzzy_query, collector);
System.out.println("\ncollector.getTotalHits() = " + collector.getTotalHits());
我也无法使用 Lucene 文档中显示的 ComplexPhraseQueryParser 类。我在做:
import org.apache.lucene.queryParser.*;
有人知道为什么它无法访问或我做错了什么吗?抱歉问题太长了。
【问题讨论】: