【问题标题】:Searching for alphanumeric space-separated string in a field with multiple strings (Lucene)在具有多个字符串的字段中搜索以字母数字空格分隔的字符串(Lucene)
【发布时间】:2015-01-15 20:34:40
【问题描述】:

背景

我有一个包含这两个字段的 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,或我尝试过的任何一种),我无法找到单独的“代码”字符串最后得到一个空的结果集。因此,如果我在 Luke 中搜索 'codes:"CHP-194561"' 作为我的查询,我什么也得不到。但是,如果我使用 'company:"Car"' 进行搜索,我可以毫无问题地得到结果。

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

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

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

【问题讨论】:

  • 您使用哪个分析器/标记器来索引代码字段?

标签: indexing lucene analyzer


【解决方案1】:

您是否尝试过使用WhitespaceTokenizer?它会在您需要的空白处拆分。

【讨论】:

  • 是的。我使用了 WhitespaceAnalyzer,以及我自己的使用 WhitespaceTokenizer 的分析器。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多