【问题标题】:Solr not searching (dynamically created) fieldsSolr 不搜索(动态创建的)字段
【发布时间】:2011-02-28 20:38:30
【问题描述】:

我已将文档导入到 Solr,这些文档具有从模式动态创建的字段(主要是 *_s)。在后端(/solr/admin)中,我可以看到它们存在:聚合统计信息,如词频,正确显示。它们都被列为索引和存储。

但是,即使我搜索所有字段,它们也不会出现在查询中,例如:

/solr/select/?indent=on&q=myterms&fl=*

这个问题似乎和SOLR not searching on certain fields类似,我在那里尝试了解决方案,是:

如果您希望标准查询处理程序搜索所有字段,您可以在 solrconfig.xml 中更改它(我总是添加第二个查询处理程序而不是修改“标准”。fl 字段是您想要的字段列表搜索。它是一个逗号分隔的列表或 *。

我对标准 solrconfig.xml 进行了更改,但仍然没有结果。

我尝试创建一个非常简单的文档:

{'id':5, 'name':'foo'}

这个查询返回那个文档:

/solr/select/?indent=on&q=foo&fl=*

读取没有结果的查询的全部结果:

<response>
−
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
−
<lst name="params">
<str name="echoParams">all</str>
<str name="h1">true</str>
<str name="defType">dismax</str>
<str name="indent">on</str>
<str name="start">0</str>
<str name="q">Foo</str>
<str name="version">2.2</str>
<str name="rows">10</str>
</lst>
</lst>
<result name="response" numFound="0" start="0"/>
</response>

【问题讨论】:

    标签: solr


    【解决方案1】:

    你的“标准”查询处理程序的 deftype 是 dismax 吗?如果没有,那么它将无法正常工作。正如您提供的问题的答案所说,您必须使用 dismax 在多个字段中进行搜索。如果您不想使用 dismax 并且仍想一次搜索多个字段,则必须在索引时使用复制字段功能将要搜索的所有字段收集到一个字段中,然后将该字段设为您的默认字段。

    【讨论】:

    • 我正在使用 dismax,但仍然没有得到结果。我已经用完整的回复更新了我的帖子。
    • 您的 dismax 配置的 qf 参数中是否列出了“名称”字段?一定是因为“foo”在该字段中被索引。
    • 你能发布你整个 solrconfig.xml 的要点吗?
    【解决方案2】:

    由于您使用的是_s,因此您可以将这些字段复制到solr/collection1/conf/schema.xml 中的“文本”,如下所示:

    <copyField source="*_s" dest="text" maxChars="3000"/>
    

    Why do dynamic fields not act like normal fields (specifically when querying and displaying in Hue) in solr? 的解决方案略有不同,即取消注释此 *_t 行:

    <!-- Above, multiple source fields are copied to the [text] field. 
           Another way to map multiple source fields to the same 
           destination field is to use the dynamic field syntax. 
           copyField also supports a maxChars to copy setting.  -->
    
    <!-- <copyField source="*_t" dest="text" maxChars="3000"/> -->
    

    这使我的动态字段可以搜索:

    curl http://localhost:8983/solr/collection1/select?q=foo
    

    这里描述了“catchall”text 字段:

    <!-- catchall field, containing all other searchable text fields (implemented
         via copyField further on in this schema  -->
    <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
    

    另见http://wiki.apache.org/solr/SchemaXml#Copy_Fields

    【讨论】:

      【解决方案3】:

      我看到您使用查询“Foo”,而 name 的值是“foo”。您可能想检查您是否在 de 索引中使用 lowercase 术语并在架构中查询您用于 name 的字段类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 2014-11-30
        • 1970-01-01
        • 2012-10-21
        • 1970-01-01
        相关资源
        最近更新 更多