【发布时间】:2018-03-27 17:46:21
【问题描述】:
我正在尝试设置从我的 Sphinx 索引中获取一些数字的功能,但不知道如何获取我想要的信息。
我有一个 mysql 数据库,其中包含文章、为该数据库设置的 sphinx 索引和全文搜索,一切正常。我想要的是得到一些数字:
- 搜索文本(关键字或关键短语)一直出现在所有文章中的次数(更有可能仅限于“从 X 到 Y 时间间隔的文章”)
- 与之前相同,但 2 个关键字或关键短语(即“x AND y”)出现在同一篇文章中的次数
我正在做类似于第一次手动使用我制作的 bat 文件
indexer ind_core -c c:\%SOME_PATH%\development.sphinx.conf --buildstops stats.txt 10000 --buildfreqs
这为我生成了一个包含所有重复关键字的 txt,以及它们在早期开发阶段出现的频率,这有助于形成我感兴趣的关键字列表。现在我正在尝试做同样的事情,但只是为了有限预先确定的关键字列表并集成到我的 Rails 项目中,以便将来能够构建图表。
我尝试运行一些查询,例如
@testing = Article.search 'Keyword1 AND Keyword2', :ranker => :wordcount
但我不确定它是如何工作的以及如何处理结果,以及这是否是我正在寻找的。p>
我尝试的另一种方法是手动 mysql 查询,例如
SELECT id,title,WEIGHT() AS w FROM ind_core WHERE MATCH('@title keyword1 | keyword2') OPTION ranker=expr('sum(hit_count)');
但我也不确定如何从这里处理结果(以及如何将其实际实施到我现有的 rails 项目中),并且每个查询限制为 20 行(我认为我可以在设置中的某处更改?)。但至少看看我感兴趣的mysql结果是所有文章(或设定时间范围内的所有文章)的hit_count。
关于如何做到这一点的任何想法?
更新: 我发现的当前方法是添加
@testing = Article.search params[:search], :without => {:is_active => false}, :ranker => :bm25
到具有某些条件的控制器(因此它不会从 nil 搜索中出错)。 :is_active 是我的软删除标志,不想搜索已删除的条目,所以不要介意。在视图中我只是显示了
<%= @testing.total_entries %>
如果我理解正确的话,这会显示我找到的 sphinx 匹配的数量(几乎就是我要找的)。
【问题讨论】:
-
只是想确认一下:你想要匹配的记录数,还是给定关键字出现的次数?
-
给定关键字出现在同一个文档中的次数,这意味着 sphinx 术语中的 hit_count,因此匹配的记录数,而不仅仅是关键字计数。
标签: mysql ruby-on-rails thinking-sphinx