0

我正在使用 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. 用户名 = foobar
  2. 电子邮件 = foobar@example.com
  3. 电话 = 0723123456

如果我搜索 foo、fooba 或 foobarx,即使我输入 f 或超过单词 foobar,我也不应该得到结果吗?

4

1 回答 1

0

如果您正在寻找查询解析器语法,您应该查看通配符模糊查询语法。

您可以使用 funtax 搜索前缀,例如:

username:foob*

您可以改用模糊查询,其中:

username:foobarx~

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

username:foorbarx~0.5
于 2013-07-06T08:39:39.970 回答