【问题标题】:Lucene.Net search for text with underscoreLucene.Net 搜索带下划线的文本
【发布时间】:2012-07-05 10:14:35
【问题描述】:

我正在使用标准分析器并使用以下代码添加我要搜索的字段

                doc.Add(
                    new Field(
                        "BookId",
                        book.CatalogueBookNo.ToString(),
                        Field.Store.YES,
                        Field.Index.NOT_ANALYZED,
                        Field.TermVector.NO));

                doc.Add(
                    new Field("Title",
                        strTitle, 
                        Field.Store.YES, 
                        Field.Index.ANALYZED, 
                        Field.TermVector.NO));

                doc.Add(
                    new Field("Author",
                        strAuthor,
                        Field.Store.YES,
                        Field.Index.ANALYZED,
                        Field.TermVector.NO));

                doc.Add(
                    new Field("IssueId_fk", 
                        book.IssueId_fk, 
                        Field.Store.YES, 
                        Field.Index.NOT_ANALYZED, 
                        Field.TermVector.NO));

所有字段均可搜索,除了 IssueId_Fk 字段(未分析因此完好无损) - 此字段包含格式为“11_12_4”、“11_12_3”等的字符串值。

我已经在记事本中打开了 lucene 索引,并且可以确认这些值是用下划线分隔和完整的,但是在 IssueId_Fk 字段上搜索什么也没有返回。

有人知道如何解决这个问题吗?

干杯

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

    那么你可以尝试使用 solr.KeywordTokenizerFactory 进行分析吗?

    【讨论】:

    • 上述评论不正确“将其设置为 Field.Index.NOT_ANALYZED 意味着它将不可搜索”。字段可以在不被分析的情况下进行搜索。如果未分析某个字段,则意味着应用任何标记器都不会生成不同的单词形式、近似匹配等
    • 实际上现在已经通过创建自定义分析器解决了这个问题。但是,感谢您提供有关 solr 标记器的信息。但是不太清楚是否需要关键字标记器 - 如果您希望字段保持完整(例如 ID 字段等)并且不以任何方式更改,您只是不分析它。这应该可以工作,但不知何故使用标准分析器它没有。
    【解决方案2】:

    实际上现在已经通过创建自定义分析器解决了这个问题。但是,感谢您提供有关 solr 标记器的信息。但是不太清楚是否需要关键字标记器 - 如果您希望字段保持完整(例如 ID 字段等)并且不以任何方式更改,您只是不分析它。这应该有效,但使用标准分析仪却没有。 -

    【讨论】:

      猜你喜欢
      • 2022-08-15
      • 2018-09-08
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 2013-08-22
      • 1970-01-01
      相关资源
      最近更新 更多