【问题标题】:How to filter results by sql_attr_uint in sphinxapi?如何在 sphinxapi 中按 sql_attr_uint 过滤结果?
【发布时间】:2013-08-29 07:28:00
【问题描述】:

我的 sphinx 配置中有 sql_attr_uint = category

如何在 sphinxapi 中使用 sql_attr_uint 过滤结果? 例如,我想根据test 对结果进行排序,其中类别为13 or 23 or 77

$results = $sp->Query("test", "index"]);

【问题讨论】:

  • $query 的值是多少?
  • @Lee test - 搜索词。我现在不知道要包含 category 过滤器

标签: php mysql api search sphinx


【解决方案1】:

首先,我只想说你决定删除的那段 PHP 代码,这会妨碍其他人提供帮助,因为他们不知道你是如何连接到 sphinx 搜索引擎以及什么类型的您正在执行的查询(因为您可以使用 SQL 样式查询以及“CLI 样式”查询)。

无论如何,从那段代码中,很明显您使用的是 php.net 上记录的 PHP Sphinx 客户端。为此,你应该使用这个:http://www.php.net/manual/en/sphinxclient.setfilter.php

因此,您可以在查询方法之前执行此操作(其中 $SP 是您的 sphinx 客户端对象):

$SP->setFilter('category', array( 12, 23, 77) );

【讨论】:

  • 谢谢。奇迹般有效。编辑回代码。如何设置Query 搜索所有内容?所以我只能按过滤器排序?
  • 您可以尝试* 作为您的查询,但是,sphinx 不是数据存储,它是一个文本搜索引擎。作为 sphinx 配置的一部分,您必须按照前缀/后缀索引设置参数。这意味着狮身人面像只会从特定长度索引。如果您的最小长度为 3,则在您的 * 之前/之后至少需要 3 个字符才能成功搜索(假设您将 enable_star 设置为 true)。老实说,假设您使用 mysql 数据存储作为源,如果您实际上不使用文本搜索,则应该使用直接 mysql 查询。
  • 我已经尝试过了,最小长度设置为 1 $results = $sp->Query("*", "index");,我将 enable_star 设置为 true。它仅适用于字符组合。我认为我可以进一步优化我网站的某些部分,因为 sphinx 与 mysql 相比非常快。
  • Sphinx 是我所说的全文替换。我认为您不能只进行通配符搜索。如果我正确理解狮身人面像,即使是对类别 ID 的附加过滤也将在“后查询”中完成。因此,您要做的是告诉 sphinx 获取所有记录,然后循环并删除与类别 ID 之一不匹配的记录。在那种情况下,在类别字段上设置索引的情况下,Sphinx 不可能比 MySQL 更快。如果是这样,那么你一定搞砸了你的 mysql 配置。
猜你喜欢
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多