首页->FAQ->显示文章
译自:http://wiki.apache.org/lucene-java/LuceneFAQ#Why_am_I_getting_no_hits_.2BAC8_incorrect_hits.3F
一些可能的原因:
- 需要的词所在的字段没有被定义为“indexed”。设字段为indexed,然后重新索引文档。
- 词所在的字段在索引时没有被切分(tokenized),所以全部内容被当作一个单独的词。重新索引文档,确保字段内容被切分。
- 查询中的字段根本不存在。这种情况下,你不会得到任何错误信息,仅仅是没有任何结果。
- 查询中的字段大小写错误。字段名是区分大小写的。
- 你搜索的词是一个停止词,索引的时候就被你使用的分析器(analyzer)丢弃了。例如,如果你的分析器使用一个停止词过滤器(StopFilter),那么搜索“the”就永远不会有结果。
- 你在索引和搜索时使用了不同的分析器(或者相同的分析器不同的停止词),那么同一个词就会在索引和搜索的时候被转换为不同的形式。
- 你使用的分析器区分大小写(例如,他没有使用LowerCaseFilter),而查询中的词和文档索引的词大小写形式不同。
- 你索引的文档非常大。Lucene通常仅索引文档的前10000个词,以避免OutOfMemory错误。参见IndexWriter.setMaxFieldLength(int)。(译注,可以修改这个限制,也可以考虑改变对文档的划分方式。例如一本书作为一个文档,还是每个章节作为一个文档。)
- 确定在添加文档后,打开了一个新的IndexSearcher。IndexSearcher仅能看到它打开时在索引中的文档。
- 如果你使用QueryParser,它可能解析的和你预期的布尔查询(BooleanQuerySyntax)不同。
-
- 如果在索引的时候,调用过omitTf()方法,那么范围(span query)搜索和短语搜索(phrase query)就无法工作,因为这样词的位置信息不会被保存。范围搜索和短语搜索需要位置信息才可能正常工作。
如果不是上面的原因,那么下面的方法可以帮你debug问题:
- 使用Query's toString()方法,看实际上查询分析的结果是什么。
- 使用Luke浏览你的索引:在“Documents”页,浏览文档,使用“Reconstruct & Edit”查看字段是如何被保存(“Stored original”页)和索引("Tokenized"页)的。
所属分类:
[lucene]
[Java]
tag:
命中,
tinyfool发布于2009年10月14日 13:35
最后更新于2009年10月14日 13:38