在具有多个字符串的字段中搜索字母数字空格分隔的字符串(Lucene)

时间:2014-11-18 15:31:46

标签: indexing lucene analyzer

背景

我有一个带有这两个字段的Lucene 3.6.0索引(每个字段下面都有样本数据):

company
-------
Tesla Car Works
Family Auto Body

codes
-----
CHP-13724 CHP-194561
RPS-204978 RPS-204979 CHP-194567

codes字段由多个代码字符串组成,例如“CHP-13724”,或“RPS-204979”。

问题:我无法在codes字段中搜索单个代码字符串。 (有关详细信息,请参阅下面的“详细信息”。)

问题

有没有办法成功搜索其中一个代码,理想情况下使用标准的Lucene软件包而不是Contrib软件包? (如果必须是Contrib包,请指向下载链接。)

详细

如果我使用Luke搜索字段,并将搜索字段的分析器设置为StandardAnalyzer(或WhitespaceAnalyzer,或我尝试过的任何一个),我就无法找到单独的“代码”字符串并最终得到一个空的结果集。因此,如果我用“代码:”CHP-194561“'作为我在路加的查询进行搜索,我什么也得不到。但是,如果我搜索'公司:'汽车“'我没有问题得到结果。

例外:如果我使用通配符搜索记录空格分隔的代码列表中的第一个代码,例如代码:RPS-204978 *,它会给我预期的行。但是使用第二个代码,例如代码:RPS-204979 *,不返回任何内容。

所以:在codes字段中,由于某种原因,它找不到以空格分隔的字符串,除非它是第一个字符串并且在查询中使用了通配符,但它可以在公司字段中字符串出现的地方,不使用通配符。

编辑:使用NOT_ANALYZED索引codes字段。 (因此该字段包含单个术语,一个字符串,由一系列以空格分隔的代码组​​成。)

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用WhitespaceTokenizer?它分裂在您需要的空白区域上。

答案 1 :(得分:0)

基本上,我发现我不能在一个长的非标记化字符串中搜索以空格分隔的子字符串(除了搜索字符串的第一部分)。

P.S。最终,我放弃了并使用WhitespaceAnalyzer(将长字符串拆分为多个术语)索引该字段。我希望避免这种情况,因为它意味着一个相当长的索引重建,但这是我能看到的唯一前进方式。