Lucene通过“编码”进行搜索和编制索引......为什么Solr不这样做?为什么我们需要一个schema.xml?它的重要性是什么?有没有办法避免将我们想要的所有字段放入schema.xml? (我想动态字段是要走的路,对吗?)
答案 0 :(得分:6)
这就是它的构建方式。 Lucene是一个库,因此您可以将代码链接到它。另一方面,Solr是一个服务器,在某些情况下,您可以使用非常少的编码(例如使用DataImportHandler索引和Velocity插件进行浏览和搜索)。
架构允许您以声明方式定义每个字段的分析和查询方式。
如果您想要一个基于Lucene的无架构服务器,请查看ElasticSearch。
答案 1 :(得分:5)
如果你想避免不断调整schema.xml,那么动态字段确实是要走的路。例如,我喜欢Sunspot schema.xml - 它使用动态字段在字段名称中设置基于类型的命名约定。
https://github.com/outoftime/sunspot/blob/master/sunspot/solr/solr/conf/schema.xml
根据此架构,名为content_text
的字段将被解析为文本字段:
<dynamicField name="*_text" stored="false" type="text" multiValued="true" indexed="true"/>
这与其先前对文本fieldType
的定义相对应。
我使用的大多数schema.xml文件都是基于Sunspot架构开始的。我发现你可以通过在schema.xml中建立和重用一个好的约定来节省大量的时间。
答案 2 :(得分:1)
Solr充当独立搜索服务器,无需编码即可配置。您可以将其视为Lucene的前端。 schema.xml文件的使用是定义索引。
如果可能,我建议您在架构文件中定义所有字段。这使您可以更好地控制这些字段的索引方式,并允许您利用复制字段(如果需要)。