2010-06-02 94 views
0

我已经设置了Solr的第一个'安装',其中每个索引(文档)代表一个音乐作品(包含数字(int),标题(字符串),版本(字符串),作曲家(字符串)和关键字(串))。我已将字段'标题'设置为默认搜索字段。Solr:我如何索引和搜索几个字段?

但是,当我想对所有字段执行查询时,我该怎么办?我想让用户有机会在所有领域进行搜索,并且据我所知至少有两种选择:

(1)指定查询应针对哪些字段。

(2)使用复制域设置Solr配置,以便将添加到每个域的值复制到可用于搜索的“全部捕获”域。然而,在这种情况下,我不确定事情会发生什么,当我考虑到各个领域的数据类型并不完全相同时(各个领域对较小的程度会通过过滤器,但作为复制领域值是在原始字段的过滤器运行之前从原始字段中获取的,我必须将一个单一过滤器应用于复制字段上的所有值。这又会导致整数被“过滤”,就像字符串一样将)。

这是我应该使用复制域的情况吗?乍一看,似乎在所有领域搜索都更加“灵活”。但是,也许有成本?

所有的反馈赞赏!谢谢!

回答

1

执行复制字段时,目标字段内的数据将使用为该字段定义的分析器编制索引。因此,如果您将目标字段定义为文本数据,则最好只复制其中的文本数据。所以是的,在同一个字段中复制一个整数可能没有意义。但是,您是否真的希望用户能够在默认搜索中搜索您的“号码”字段?它对于标题,作曲者和关键字是有意义的,但也许不适用于可能表示数据库中的id的整数字段。

查询所有字段的另一种选择是使用Dismax。您可以准确指定要查询的字段,还可以为每个字段定义特定的引导。你也可以定义一个默认排序,为更多最近的文档和许多其他花哨的东西添加额外的提升。

+0

谢谢你的回答。然而,我不知道它是否有任何后果(例如,性能方面)来搜索多个字段,而不是基于复制字段值(复制字段)搜索单个字段? – sbrattla 2010-06-14 07:11:30

+0

在性能方面,我认为不同领域的搜索与在同一领域多次搜索之间存在显着差异。 Lucene必须对查询的每个条款进行二分查找。不管它在相同的字段上进行n次搜索还是在不同的字段上进行n次搜索都不应该不同。 – 2010-06-14 13:30:51

+0

感谢您的输入! – sbrattla 2010-06-14 13:48:30