Php 从Sphinx中的空查询中排除关键字

Php 从Sphinx中的空查询中排除关键字,php,sphinx,Php,Sphinx,是否可以通过Sphinx从空查询中排除某些关键字? 我想到的是使用Extended2匹配模式,为了排除关键字,我将使用-或操作员。我只需要通过Sphinx获取数据,而不使用任何查询(排除运算符除外) 在Sphinx中,我使用以下方法获取数据: $data = $sphinx->query(''); 此查询返回的数据不必与任何内容匹配(这意味着它将返回所有数据,当然也仅限于查询限制)。问题是,如果我添加了一个关键字!或者-运算符,它不会返回任何内容。例如: $data = $sphinx-

是否可以通过Sphinx从空查询中排除某些关键字?

我想到的是使用Extended2匹配模式,为了排除关键字,我将使用
-
操作员。我只需要通过Sphinx获取数据,而不使用任何查询(排除运算符除外)

在Sphinx中,我使用以下方法获取数据:

$data = $sphinx->query('');
此查询返回的数据不必与任何内容匹配(这意味着它将返回所有数据,当然也仅限于查询限制)。问题是,如果我添加了一个关键字!或者-运算符,它不会返回任何内容。例如:

$data = $sphinx->query('-google');
$data
返回为
false

也许还有另一种方法可以做到这一点。请帮忙。
谢谢。

据我所知,这是不可能的。Sphinx将无法计算任何涉及搜索整个集合的查询

对于允许您使用
-
的两个选项,文档中明确指出这是不可能的:

:

诸如“-dog”之类的查询隐式包含集合中的所有文档,因此无法对其求值

:

但是,查询必须能够在不涉及所有文档的隐式列表的情况下进行计算


简单的回答是:不,这是不可能的。唯一的替代方法是,如果您希望为一小部分关键字实现此功能,那么您可以在数据库中添加一个标志,并将值设置为
true
(如果文本包含此关键字)。您可以使用
SetFilter()
从搜索结果中排除它们。我正在使用此技巧从我的列表中排除包含特定关键字集的文档。

据我所知,这是不可能的。Sphinx将无法计算任何涉及搜索整个集合的查询

对于允许您使用
-
的两个选项,文档中明确指出这是不可能的:

:

诸如“-dog”之类的查询隐式包含集合中的所有文档,因此无法对其求值

:

但是,查询必须能够在不涉及所有文档的隐式列表的情况下进行计算


简单的回答是:不,这是不可能的。唯一的替代方法是,如果您希望为一小部分关键字实现此功能,那么您可以在数据库中添加一个标志,并将值设置为
true
(如果文本包含此关键字)。您可以使用
SetFilter()
从搜索结果中排除它们。我使用这个技巧从我的列表中排除包含特定关键字集的文档。

Sphinx不喜欢只使用否定查询。如果选中GetLastError()/GetLastWarning(),它会显式地这样说

主要原因是它不能有效地使用它的索引。斯芬克斯是基于倒排索引的概念。因此,要运行此查询,它需要获取每个文档的列表,然后删除与关键字匹配的文档

但是你让它工作。只需要给斯芬克斯一个关键字,将在每一个单独的文件。那我就做吧

$data = $sphinx->query('popularword -google');
如果你没有一个单词,每个文档都会用到,只需添加一个假单词:)

那么你能做什么呢

$data = $sphinx->query('__ALL__ -google');
因为每个文件上都会有这个词


不要期望查询速度很快

Sphinx不喜欢只进行否定查询。如果选中GetLastError()/GetLastWarning(),它会显式地这样说

主要原因是它不能有效地使用它的索引。斯芬克斯是基于倒排索引的概念。因此,要运行此查询,它需要获取每个文档的列表,然后删除与关键字匹配的文档

但是你让它工作。只需要给斯芬克斯一个关键字,将在每一个单独的文件。那我就做吧

$data = $sphinx->query('popularword -google');
如果你没有一个单词,每个文档都会用到,只需添加一个假单词:)

那么你能做什么呢

$data = $sphinx->query('__ALL__ -google');
因为每个文件上都会有这个词

不要期望查询速度很快