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

Indexing 在具有多个字符串的字段中搜索字母数字空格分隔字符串(Lucene) 出身背景,indexing,lucene,analyzer,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 代码字段由多个代码字符串组成,例如CHP-13724或RPS-204979 问题是:我无法在“代码”字段中搜索单个代码字符串。有关更多信息,请参阅下面的详细信息 问题 是否有一种方法可以成功地搜

我有一个Lucene 3.6.0索引,每个索引下面有两个字段示例数据:

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

codes
-----
CHP-13724 CHP-194561
RPS-204978 RPS-204979 CHP-194567
代码字段由多个代码字符串组成,例如CHP-13724或RPS-204979

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

问题 是否有一种方法可以成功地搜索这些代码之一,理想情况下使用标准Lucene包而不是Contrib包?如果它必须是Contrib软件包,请给我一个下载链接

细节 如果我使用Luke搜索一个字段,并将搜索字段的分析器设置为StandardAnalyzer或WhitespaceAnalyzer,或者我尝试过的许多分析器中的任何一个,我都无法找到单独的“代码”字符串,结果集为空。所以,如果我用“代码:CHP-194561”作为我在Luke中的查询进行搜索,我什么也得不到。然而,如果我用“公司:汽车”搜索,我得到的结果没有问题

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

因此:在codes字段中,由于某种原因,它无法找到空格分隔的字符串,除非它是第一个字符串并且在查询中使用了通配符,但无论字符串出现在哪里,它都可以在company字段中找到,并且不使用通配符


编辑:代码字段使用NOT_分析进行索引。因此,该字段包含一个术语,一个字符串,它由一系列以空格分隔的代码组成。

您尝试过使用空格标记器吗?它根据您需要的空格进行拆分。

基本上,我发现除了搜索字符串的第一部分外,我无法在单个长的非标记化字符串中搜索空格分隔的子字符串


最后,我放弃了,用WhitespaceAnalyzer为字段编制索引,它将长字符串分解成多个术语。我希望避免这种情况,因为这意味着相当长的索引重建时间,但这是我能看到的唯一前进方向。

您使用哪个分析器/标记器对代码字段进行索引?是的。我使用了WhitespaceAnalyzer,我自己的分析器使用了WhitespaceTokenizer。