为什么 Solr 不基于约定提取?

Why is Solr not extracting based on conventions?

我目前在 Windows 7 机器上安装了 solr 5.5.0。

我正在努力让最近离开我们公司的开发人员构建的项目正常运行。这是掉在我腿上的,我以前没有使用过 solr 的经验,所以我正在努力弄清楚它。

我遇到的问题是,当我上传文件时,它似乎没有提取这样定义的自定义字段:

public class SolrIndexFile
{
    [SolrUniqueKey("id")]
    public string Id { get; set; }

    [SolrField("attr_resourcename")]
    public string Path { get; set; }

    [SolrField("extension_s")]
    public string Extension { get; set; }

    [SolrField("bytes_s")]
    public string Bytes { get; set; } 
}

起初我以为我需要指定一个 schema.xml 但随着我阅读更多(并且 solr 将其重命名为 schema.xml.bak)我发现现在 solr5 正在使用托管模式.

然后我想我需要手动添加那些字段名称。但后来我看到了约定​​(尽管我想我在 schema.xml 文件中看到了它)但这些约定似乎仍然适用。

所以现在我回到原点,试图弄清楚如何将这些字段放入摘录中。这是实际上传文件的代码。

using (var fileStream = File.OpenRead(tmp))
{
    _solr.Extract(new ExtractParameters(fileStream, index.Id, index.Path)
    {
        ExtractFormat = ExtractFormat.Text,
        ExtractOnly = false,
        AutoCommit = true
    });
}

tmp 是我上传的文件路径。

感谢任何帮助!

当您是整个项目的新手时,您确实需要将一个问题拆分成多个部分,以查看哪一部分才是真正的问题。端到端测试然后尝试在中间修复某些东西可能太复杂了。

对于您的情况,最简单的方法可能是转储您的 SolrIndexFile 内容以查看提取是否实际填充了这些值。如果没有,则问题不是 Solr,而是您的自定义代码。

如果是,那么问题是 Solr 端会发生什么。如果您进入管理 UI、then on the schema browser screen,您可以选择特定字段并查看它包含哪些标记(索引表示)。这样您就可以检查是否有任何内容进入了 Solr。如果没有,那么您就会担心模式和映射。您还可以执行基本查询并检查新文档是否实际显示是否带有这些额外字段。如果没有,您可能有多个 Solr 实例,缺少提交或其他问题。

如果一切正常,那么您将重点放在查询端,看看您是否可能不要求这些字段或其他遗漏。