繁体   English   中英

如何通过文档类型提升Solr搜索结果?

[英]How to boost Solr search results by document type?

注意:我将Sunspot与Rails一起使用,但是如果您不熟悉Sunspot的DSL,则通用的Solr响应仍可以指导我正确的方向。

我有一些类似的模型:

class Book < ActiveRecord::Base
  searchable do
    text :title, boost: 2.0
    text :content
  end
end

class Article < ActiveRecord::Base
  searchable do
    text :title, boost: 2.0
    text :content
  end
end

我需要在所有模型中同时进行全文搜索以获取混合结果,但是在搜索结果中,文章应比书籍更具相关性。

我当前执行搜索的代码如下。

search = Sunspot.search do
  fulltext search_terms, minimum_match: 1
end

这样可以正确返回混合结果,但是与Book结果相比,我需要提高Article结果。 我想清楚一点,这与首先列出所有Article结果,然后列出所有Book结果是不同的。 根据Solr如何根据结果的整体内容对结果进行排名,仍然可能会有一些混淆。

我猜我将需要使用一些增强功能,但不能确切地知道如何。

有指针吗?

太阳黑子通常试图将这些东西作为“搜索”块中的函数公开。 检查Sunspot文档显示此信息...

# Posts with pizza, scored higher if featured
Post.search do
  fulltext 'pizza' do
    boost(2.0) { with(:featured, true) }
  end
end

那是从https://sunspot.github.io/docs/#Search_In_Depth

因为Sunspot将模型名称索引到“类型”字段中,所以我认为您可以这样进行调整:

boost(10.0) { with(:type, "Article") }

唉。 如果您尝试这样做,将会得到如下错误:

Sunspot::UnrecognizedFieldError: No field configured for Article, Book with name 'type'

这是因为在这种情况下,当前版本的Sunspot DSL引用的字段是在searchable块中定义的,而type字段是一种特殊情况。 也许是在那里为Sunspot做出贡献的好机会?

知道这一点,我们有一个可能的解决方法,那就是在您的文档中定义我们自己的与类型相关的自定义字段。 也许称其为source以避免破坏特殊情况的默认值,尽管测试可能表明这没什么大不了的。

引导我看最后一个代码示例(未经测试,ymmv等!)

class Article < ActiveRecord::Base
  searchable do
    text :title, boost: 2.0
    text :content
    string :source do
      class.name
    end
  end
end

Sunspot.search(Article, Book) do
  fulltext(search_terms) do
    minimum_match 1
    boost(ARTICLE_BOOST) { where(source, "Article") }
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM