代码之家  ›  专栏  ›  技术社区  ›  sbrattla

索尔:如何索引和搜索几个字段?

  •  0
  • sbrattla  · 技术社区  · 16 年前

    我已经设置了第一个solr的“安装”,其中每个索引(文档)代表一个音乐作品(具有数字(int)、标题(string)、版本(string)、作曲家(string)和关键字(string)等属性)。我已将字段“标题”设置为默认搜索字段。

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

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

    (2) 使用copyFields设置solr配置,以便添加到每个字段的值将被复制到一个“catch all”类字段,该字段可用于搜索。然而,在这种情况下,当考虑到不同字段的数据类型不完全相同时,我不确定结果会是怎样的(不同的字段将在较小的程度上通过过滤器,但由于copyfield值是在值通过其原始字段之前从其原始字段中获取的字段的过滤器,我必须对copyfield上的所有值应用一个过滤器。同样,这将导致整数被“过滤”,就像字符串一样)。

    在这种情况下,我应该使用copyfields吗?乍一看,搜索所有字段似乎更加“灵活”。但是,也许有成本?

    感谢所有反馈!谢谢!

    1 回复  |  直到 16 年前
        1
  •  1
  •   Pascal Dimassimo    16 年前

    在执行复制字段时,将使用为该字段定义的分析器对目标字段中的数据进行索引。因此,如果您将目标字段定义为文本数据,那么最好只复制其中的文本数据。所以,在同一个字段中复制一个整数可能是没有意义的。但您真的希望用户能够在默认搜索中搜索您的“数字”字段吗?标题、作曲家和关键字都是有意义的,但对于可能表示数据库中ID的整型字段可能不是这样。

    查询所有字段的另一个选项是使用 Dismax . 您可以精确地指定要查询的字段,但也可以为每个字段定义特定的引导。您还可以定义一个默认排序,为最近的文档和许多其他花哨的东西添加额外的增强。