我熟悉SOLR。
我想使用SOLR对许多实体进行全文搜索。我不想为每种不同类型的实体创建一个Document。我不希望能够搜索特定字段。如果指定的字符串在任何项目中的任何位置,我只对此感兴趣。
在数据库方面,例如我有一个表新闻和一个表Employee,我想搜索单词'apple',我不介意它在哪个字段,我只想从中获取数据库ID包含它的记录。
这可能是一个解决方案,我使用这样的SOLR模式:
<fields>
<field name="id" type="string" indexed="true" stored="true"/>
<field name="content" type="text" indexed="true" stored="false"/>
</fields>
所以,我只需要一个ID和内容。我将所有数据放入其中,我希望能够搜索到一个“内容”字段。当我搜索某些单词时,它会在'id'和'content'中查找它。
这是个好主意吗?任何性能或设计问题?
谢谢, 的Tamas
答案 0 :(得分:4)
见https://wiki.apache.org/solr/SchemaXml#Copy_Fields。它说:
常见的要求是将所有输入字段复制或合并到单个solr字段中。这可以按如下方式完成: -
<copyField source="*" dest="text"/>
这通常是在多个字段中搜索的内容。
但是如果您甚至不想要原始字段,只需将所有字段连接到一个大字段content
并在Solr中索引。应该没有问题。
答案 1 :(得分:0)
您可以将字段复制到文本(请参阅分发中的示例)并将该集合设置为默认字段(solrconfig.xml中的“df”参数用于选择处理程序)。
或者,如果您预计会有更复杂的要求和/或非文本搜索,我建议您查看eDismax with qf parameter,它会自行搜索所有这些字段。