【问题标题】:Search in Single-Token-Field using Lucene.NET使用 Lucene.NET 在单令牌字段中搜索
【发布时间】:2023-03-15 00:24:02
【问题描述】:

我正在使用 Lucene.NET 3.0.3 来索引 word、excel 等文档的内容以及每个文档的一些自定义字段。
如果我将名为 "title" 的字段索引为 Field.Index.NOT_ANALYZED,Lucene-Index 会以正确的形式存储该字段。球洞标题存储在单个令牌中。这就是我想要的。

例如文档标题为“Lorem ipsum dolor”
Lucene-index 中的字段:“Lorem ipsum dolor”

如果我在此字段中使用精确搜索进行搜索,我将得不到任何结果。
我的搜索词看起来像:title:"Lorem ipsum dolor"
对于搜索,我使用相同的 StandardAnalzer。

为什么我找不到文件?

【问题讨论】:

    标签: search lucene.net lucene exact-match


    【解决方案1】:

    StandardAnalyzer 对空格和其他分隔符很敏感。也就是说,它将搜索词标记为三个标记:

    ( Lorem, ipsum, dolor )
    

    但是您使用Field.Index.NOT_ANALYZED 为字段title 编制了索引,因此上述三个标记都不能匹配该字段中的单个标记:

    ( Lorem ipsum dolor )
    

    使用KeywordAnalyzer,它将整个字段值标记为单个标记。与往常一样,您需要为索引和搜索使用相同的分析器。

    【讨论】:

    • 这很好用。是否可以在 KeywordAnalyzer 中使用通配符进行搜索?
    • 是的 KeywordAnalyzer 使用通配符,因此您应该使用搜索表达式 title:lorem* 获得正确匹配。但我认为title:"lorem ips"* 不是有效的搜索表达式(带通配符的短语查询),因为短语查询不支持通配符;你会得到一个错误或不匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多