Solr模式设计和性能

  • 本文关键字:性能 模式 Solr solr
  • 更新时间 :
  • 英文 :


我有一个图书数据库,它有三个实体:图书、页面和标题(在页面中找到的标题)。我对模式设计中的两种方法之间的性能感到困惑和担忧:

1-将书籍作为文档处理,即书籍字段、页面字段和标题字段。在这种方法中,所有的书籍数据都将在一个Solr文档中用非常大的字段表示。

2-将页面处理为文档,这将导致更小的字段,但文档数量更大。

我试着查阅了这份官方资料,但没能为我的问题找到一个明确的答案。

假设您要获取Solr结果并通过另一个应用程序显示它们,我会将最小的项-标题-作为文档的模型,这将使显示结果的位置更加容易。这样做可以最大限度地减少您需要编写的应用程序代码量。如果你的用户直接查询Solr,我可能会使用Page作为我的文档——大概你是在使用Solr的突出显示功能,然后帮助你的用户识别他们的搜索词是如何匹配的。

对于标题文档,我会对模式进行如下建模:

  1. 图书ID+页码+标题[string-唯一键]
  2. 书本ID[inter]
  3. 图书名称[标记文本字段]
  4. 页码[TrieIntField]
  5. 标题[标记文本字段]
  6. 该书/标题/页面组合的内容[标记文本字段]

您可能想要捕获其他属性,如作者、出版日期、出版商,但您没有在上面解释您拥有的其他信息,因此我将其排除在本示例之外。

然后,文本查询可能涉及Book NameTitleContent,您可能希望定义一个已索引但未存储的字段,该字段用作schema.xml中<copyField/>声明的目标,以便同时轻松搜索这三个字段。

对于索引,在不了解更多索引数据的情况下,我会使用ICU Tokenizer和Snowball Porter Stemming Filter,并在文本字段上指定语言规范来处理非英语数据——假设所有书籍都使用相同的语言。如果是英语,则使用标准代币化器而不是ICU。

最新更新