Troubleshoot Java Lucene ignoring Field我们目前正在使用Lucene 2.1.0进行站点搜索,但是遇到了一个难题:在目标搜索过程中,我们的索引字段之一被忽略了。 这是将字段添加到索引中的文档的代码:
对索引运行查询(*)将返回以下结果:
运行目标查询:
找不到任何结果。 我意识到这是一个非常具体的问题,因为我是Lucene新手,所以我只是想获取有关从哪里开始调试此问题的信息。 更新 已安装Luke,签出最新索引...可以在搜索中找到field market_local,因此如果执行以下操作:
搜索正常(在Luke中)。 我现在要检查分析器代码,有什么办法可以解决这个问题,以至于我们的搜索应用程序使用的是Lucene 2.1.0,而最新版本的Luke使用的是2.3.0? 对于调试Lucene,最好的工具是Luke,它可以让您在索引本身中四处查看,以查看被索引的内容,执行搜索等。我建议下载该工具,将其指向您的索引,然后查看其中的内容。 "为什么我没有获得成功?"部分Lucene FAQ中的一些建议可能会有用。您使用的是Field.Index.UN_TOKENIZED,因此不会将任何分析器用于索引(我认为)。如果在搜索时使用分析器,则可能是问题的根源-索引和搜索分析器应该相同,以确保获得正确的结果。 Luke与Lucene捆绑在一起,但是您可以告诉Luke使用另一个版本的Lucene。说" lucene-core-2.1.0.jar"包含要使用的Lucene 2.1.0," luke.jar"包含Luke和Lucene 2.3.0。然后,您可以使用以下命令启动Luke。
(技巧是将您的Lucene版本放在Luke之前的类路径上。而且,这在Windows上。在Unix上,将";"替换为":"。) 如您所知,卢克
被重写为
如果调用了Query对象的rewrite(IndexReader)方法。这两个查询应等效,因此2.1中可能存在错误。如果必须使用2.1,则可以尝试在将Query对象传递给IndexSearcher之前手动调用该方法。 另一个简单的操作是使用调试器或日志记录语句来检查
确保它是您所想的。 |