【问题标题】:Adding meta descriptions to thinking sphinx objects?将元描述添加到思考狮身人面像对象?
【发布时间】:2013-09-14 09:46:47
【问题描述】:

ThinkingSphinx 有什么简单的方法可以索引一些元数据关键字以及每个被索引的对象。

在下面的示例中,我在此处为包含来自不同位置的照片的照片表编制索引。

ThinkingSphinx::Index.define :photo, :with => :active_record do
  indexes title, description, continent, country, province, area
end

现在,如果我搜索一个位置,例如“不丹”,sphinx 会为我提供与不丹相关的所有照片和其他项目。但如果我搜索“不丹照片”,则 sphinx 不会返回任何内容,因为关键字“照片”没有与照片表中的项目一起编入索引。

我解决这个问题的一种方法是在我的照片表中添加一个“searchmeta”列,并将描述性关键字放在该列条目中。但这非常昂贵,因为相同的信息将被复制到我的照片表的所有行中。我想知道是否有任何更简单的方法可以解决这个问题?

【问题讨论】:

  • 有点“丑陋”,但我只是从查询中删除了单词(图片/照片/等)。在将查询发送到 sphinx 之前删除单词。因为正如您所注意到的,理论上这些词无论如何都应该匹配所有图像。
  • @barryhunter 谢谢。这肯定适用于照片表查询。但是,我还有其他用例,这种方法不起作用。例如,查询“travelogues”、“reviews”、“activities”表并将综合结果呈现给用户。
  • 你不能只用这个词来搜索特定的表吗?例如if (contains 'photo') search_photos() elseif (contains 'reviews') search_reviews() else search_all() 之类的?
  • 我对此不太满意。如果查询包含 BOOLEAN 运算符怎么办?如果没有其他解决方案,我会尝试查看thinkingsphix代码,看看是否可以添加新的配置规则以将表名添加到索引中。

标签: ruby-on-rails sphinx thinking-sphinx


【解决方案1】:

正如 Barry 在 cmets 中建议的那样,您可以从查询的元数据关键字中删除该信息 - 这可能是最好的,但另一种选择是您可以将其作为字符串直接添加到索引定义中(跳过需要它在数据库中):

ThinkingSphinx::Index.define :photo, :with => :active_record do
  indexes title, description, continent, country, province, area
  indexes "'photo photos'", :as => :metadata
end

【讨论】:

  • 这正是我想要的。谢谢。事实上,我正在关注巴里和你的建议。对于针对照片表的查询,我会从查询中删除某些关键字,但对于针对多个表的查询,我使用元数据索引。 query.gsub(/photo[a-zA-Z]*(\s+|$) | 图片[a-zA-Z]*(\s+|$) | |图片[a-zA-Z]*(\s+ |$)/, '')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-03
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多