【问题标题】:solr data-import searchsolr 数据导入搜索
【发布时间】:2011-12-20 04:48:48
【问题描述】:

我是 solr 的新手。我想搜索数据库。我可以导入值并对其进行索引。但是在搜索时,似乎有必要在搜索查询中提及字段名称。如何在不指定字段名称的情况下完成。

【问题讨论】:

    标签: solr data-import


    【解决方案1】:

    您可以将所有数据导入default field。那么您不需要明确提及字段名称。 (虽然你仍然可以,如果你愿意)

    Solr 的默认schema.xml 已经包含使用此类“catchall”字段的示例:

    首先该字段必须像任何其他字段一样声明:

    <field name="text" type="text_general" indexed="true"
           stored="false" multiValued="true"/>
    

    然后这个新字段必须被声明为默认字段。每当没有搜索特定字段时,都会搜索此字段:

    <defaultSearchField>text</defaultSearchField>
    

    您还需要一些 copyField 语句,将所有现有字段复制到 catchall 字段中:

    <copyField source="cat" dest="text"/>
    <copyField source="name" dest="text"/>
    <copyField source="my_special_field_1" dest="text"/>
    <copyField source="my_special_field_2" dest="text"/>
    ...
    

    因此,每当索引字段my_special_field_1 时,它的值也添加到text 字段。

    作为一种快捷方式,您可以将所有字段复制到 text 字段中

    <copyField source="*" dest="text"/>
    

    之后,您可以在不指定任何字段的情况下执行搜索。

    【讨论】:

    • 感谢您的快速回复。我只是想确认,如果我复制所有字段会导致性能问题。我的意思是由于 copyfield 是存储两次的值。
    • 它会增加索引的大小,但不会增加搜索时间(与显式声明查询中的所有字段相比)此外,由于 stored 参数为 false,因此不会存储原始数据,所以指数的增长应该是适度的。
    • 再次感谢您。最后但并非最不重要的一点是,我有三个不同的表,它们都有不同的字段名称,在索引和搜索之后,我得到了搜索结果列表。从这里我如何区分不同的表记录?
    • 只需添加另一个string类型的字段并用原始表的名称填充。
    猜你喜欢
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多