对Java Lucene忽略字段进行故障排除

对Java Lucene忽略字段进行故障排除

Troubleshoot Java Lucene ignoring Field

我们目前正在使用Lucene 2.1.0进行站点搜索,但是遇到了一个难题:在目标搜索过程中,我们的索引字段之一被忽略了。 这是将字段添加到索引中的文档的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
// Add market_local to index
contactDocument.add(
    new Field(
       "market_local"
        , StringUtils.objectToString(
            currClip.get(
               "market_local"
            )
        )
        , Field.Store.YES
        , Field.Index.UN_TOKENIZED
    )
);

对索引运行查询(*)将返回以下结果:

1
2
3
4
5
6
7
Result 1:
    title: Foo Bar
    market_local: Local

Result 2:
    title: Bar Foo
    market_local: National

运行目标查询:

1
+( market_local:Local )

找不到任何结果。

我意识到这是一个非常具体的问题,因为我是Lucene新手,所以我只是想获取有关从哪里开始调试此问题的信息。

更新

已安装Luke,签出最新索引...可以在搜索中找到field market_local,因此如果执行以下操作:

1
market_local: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。

java -classpath lucene-core-2.1.0.jar;luke.jar org.getopt.luke.Luke

(技巧是将您的Lucene版本放在Luke之前的类路径上。而且,这在Windows上。在Unix上,将";"替换为":"。)

如您所知,卢克

+( market_local:Local )

被重写为

market_local:Local

如果调用了Query对象的rewrite(IndexReader)方法。这两个查询应等效,因此2.1中可能存在错误。如果必须使用2.1,则可以尝试在将Query对象传递给IndexSearcher之前手动调用该方法。


另一个简单的操作是使用调试器或日志记录语句来检查

StringUtils.objectToString(currClip.get("market_local"))

确保它是您所想的。


推荐阅读

    linux使用索引命令?

    linux使用索引命令?,名称,系统,命令,文件,环境,工作,位置,目录,文件名,索引,

    linux提取字段串命令?

    linux提取字段串命令?,数字,字符串,状态,工具,命令,文件,范本,样式,正则,字

    linux命令搜索大全?

    linux命令搜索大全?,地址,工作,系统,命令,管理,目录,标准,基础,工具,网络,lin

    linux搜索过去命令?

    linux搜索过去命令?,系统,信息,命令,名称,工作,预期,数字,地址,标准,服务,Lin

    linux命令搜索命令?

    linux命令搜索命令?,系统,位置,地址,标准,管理,信息,命令,名称,工作,文件,Lin

    linux日志搜索命令?

    linux日志搜索命令?,信息,系统,对比,工具,一致,日志,文件,命令,实时,网络,lin

    linux命令字符搜索?

    linux命令字符搜索?,系统,工具,命令,灵活,信息,工作,字符串,文本,文件,模式,l

    linux刷新索引的命令?

    linux刷新索引的命令?,系统,工作,工具,管理,软件,设计,状态,基础,命令,预期,

    linux搜索筛选命令?

    linux搜索筛选命令?,系统,数字,电脑,盘后,盘中,工具,信息,文件,命令,字符,在l

    linux搜索日志的命令?

    linux搜索日志的命令?,实时,信息,系统,对比,最新,情况,日志,命令,地方,数据,

    linux全局搜索命令?

    linux全局搜索命令?,系统,工具,命令,灵活,信息,工作,字符串,文件,全局,字符,L

    linux命令搜索值高亮?

    linux命令搜索值高亮?,包装,网上,环境,命令,颜色,文件,语法,终端,界面,方法,l

    linux搜索命令大全?

    linux搜索命令大全?,工作,地址,系统,命令,目录,灵活,工具,管理,信息,基础,lin

    linux搜索日志命令?

    linux搜索日志命令?,实时,信息,对比,情况,日志,命令,生产,环境,系统,指令,lin

    linux命令搜索文件名?

    linux命令搜索文件名?,系统,工具,信息,名称,命令,文件,标准,字符串,文件名,

    linux命令模式搜索?

    linux命令模式搜索?,系统,地址,工作,信息,命令,位置,管理,文件,目录,内容,lin

    兄弟连linux搜索命令?

    兄弟连linux搜索命令?,系统,工作,名称,命令,信息,文件,工具,目录,字符串,文

    python模块搜索路径

    python模块搜索路径,标准,路径,模块,位置,系统,培训,通用,新增,文件,环境变