【问题标题】:JAVA Lucene not giving search results on Field?JAVA Lucene 没有在 Field 上给出搜索结果?
【发布时间】:2012-07-11 08:26:45
【问题描述】:

我正在创建一个这样的 Lucene 文档:

Document document = new Document();
document.add(new Field(FIELD_FOLDER_PATH,mSearchInput, Field.Store.YES, Field.Index.NOT_ANALYZED ));
Reader reader = new FileReader(file);
document.add(new Field(FIELD_CONTENTS, reader));
indexWriter.addDocument(document);

在对 CONTENTS 执行查询并使用通配符 * 时,我能够获取结果:

QueryParser queryParser = new QueryParser (Version.LUCENE_36,FIELD_CONTENTS, analyzer);
Query query = queryParser.parse(searchString+"*");

但是当我对 FIELD_FOLDER_PATH 使用相同的查询时,我没有得到任何结果:

QueryParser queryParser = new QueryParser (Version.LUCENE_36,FIELD_FOLDER_PATH, analyzer);
Query query = queryParser.parse(FolderPath+"*");

但是,只有当我提供确切的字符串时,我才能获取结果。

我的问题是:为什么我不能使用 (*) 来获取 FIELD_FOLDER_PATH 中的结果?是因为我创建字段的方式吗?

【问题讨论】:

  • 在索引和搜索 FIELD_FOLDER_PATH 字段时,您使用的是哪个分析器?

标签: java search lucene


【解决方案1】:

您应该使用通配符查询来支持这种功能。 这个链接会有所帮助:

http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/search/WildcardQuery.html

因此,您应该做的是创建两个查询,一个使用 queryparser,另一个使用通配符查询,然后在 BooleanQuery 中使用“SHOULD”子句中的两个查询。

有关布尔查询的详细信息,请访问此链接:

http://lucene.apache.org/core/old_versioned_docs/versions/3_0_2/api/core/org/apache/lucene/search/BooleanQuery.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2016-02-26
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多