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