【问题标题】:Lucene index field not searchableLucene 索引字段不可搜索
【发布时间】:2017-01-29 23:27:06
【问题描述】:

所以我的 Lucene 索引文档中有一个名为“Field1”的字段(用于所有意图和目的)。

当我打开 Luke 并浏览文档时,我看到大多数文档都有这个字段。但是,当我切换到搜索选项卡并输入 Field1:parameterValue 时,搜索结果为零。

在做索引时,对于文档,我有

doc.Add(new Field("Field1", field1, Field.Store.YES, Field.Index.ANALYZED));

为什么我的字段无法被搜索到?顺便说一句,我也找不到关于 Luke 的任何文档来解释文档记录中的“IdfpTSVopNLB#”列是什么。我认为此信息可能有用,因此对于具有此字段的记录之一,列值为 IdfpTS---N--- 而“Norm”列为 4.0

【问题讨论】:

    标签: c# lucene lucene.net luke


    【解决方案1】:

    “IdfpTSVopNLB#”字段是标志的集合。你应该在 Luke 中看到它的关键:

    我猜你的搜索失败的原因是你没有考虑到你的分析。例如,对于您的示例查询:Field1:parameterValue,如果该字段由 StandardAnalyzer 分析(并且查询不是分析器或关键字分析),您将不会得到任何结果。这是因为“parameterValue”会被分析器小写,所以实际的可搜索词应该是“parametervalue”。

    在搜索选项卡中,您应该会看到一个位置,可以为 Luke 选择分析器以用于查询解析。如果您使用与索引数据相同的分析器,您可能会看到更好的结果。

    【讨论】:

    • 亲爱的宝贝耶稣,我怎么会错过呢?谢谢!
    • 仍然不清楚哪些索引选项可能会导致 dfp 出现空标志(或破折号)。卢克的旧版本只有我(答案中的截图)。较新的有 4 个标志 Idfp(在原始问题中)解释为 I-Indexed (docs,freqs,pos)。浏览现有索引我只能看到每个字段的 Idfp。
    • @MicMit - 就是它所说的,“我”,如果它被索引,如果是,什么被索引,文档,频率或位置。如果一个字段被 docs 和 freqs 索引,你会看到“Idf-”。最典型的(即默认行为)索引所有三个:文档、频率和位置。
    • 我只处理不大于3.0.3的Lucene.Net,看起来Enum FieldInfo.IndexOptions后来出现了。
    【解决方案2】:

    事实证明,这是正确的做法。我只需要删除整个索引并从头开始重建它以获取新值。它不会自动更新现有索引。

    【讨论】:

    • 我很欣赏多次反对票。太糟糕了,投票者无法提供任何东西来捍卫他们对这个话题缺乏想法。
    猜你喜欢
    • 2012-02-12
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多