我应该使用什么样的分析仪才能获得拼写错误的单词?

时间:2013-07-05 19:44:45

标签: java lucene

我正在使用Lucene 4.3在我的项目中编写全文搜索功能 当我添加数据时,一切正常,但是当查询时,只有当查询中至少有一个单词与索引中某个字段的值中至少有一个单词匹配时才会获得点击。

例如,如果我添加

private static StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_43);
public static void addCustomerDoc(Map<String, String[]> parameters, String path, long customerId) throws IOException {
    File file = new File(path + "/index/");
    FSDirectory indexDir = FSDirectory.open(file);
    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_43, analyzer);
    IndexWriter writer = new IndexWriter(indexDir, config);
    Document doc = new Document();
    doc.add(new TextField("email", parameters.get("email")[0].toString(), Field.Store.YES));
    doc.add(new TextField("username", parameters.get("username")[0].toString(), Field.Store.YES));
    doc.add(new TextField("phone", parameters.get("phone")[0].toString(), Field.Store.YES));
    doc.add(new StringField("customerId", "" + customerId, Field.Store.YES));
    addDoc(writer, doc);
    writer.close();
}

private static void addDoc(IndexWriter writer, Document doc) throws IOException {
    writer.addDocument(doc);
    writer.commit();
}

添加像

这样的用户
  1. username = foobar
  2. email = foobar@example.com
  3. phone = 0723123456
  4. 如果我搜索foo,fooba或foobarx,即使我输入f或超过foobar这个词,我也不会得到结果吗?

1 个答案:

答案 0 :(得分:0)

如果您正在寻找查询解析器语法,您应该查看Wildcardfuzzy查询语法。

您可以搜索带有funtax的前缀,如:

username:foob*

您可以使用模糊查询,而不是:

username:foobarx~

或者,您可以限制模糊查询的松散程度,数字介于0和1之间,更高限制性更强,例如:

username:foorbarx~0.5