【发布时间】:2010-11-16 21:30:28
【问题描述】:
我在 Sphinx 0.9.9 中使用 SPH_MATCH_EXTENDED2 匹配模式,我想编写一个搜索查询来查找在特定字段中有任何内容的所有记录。我尝试了以下方法但没有成功:
@MyField *
@MyField !""
我认为我可以在我的索引中添加一个字段,专门检查这个并针对那个进行查询,但我希望拥有比这更大的灵活性——能够通过查询语法。
有什么想法吗?
【问题讨论】:
标签: sphinx
我在 Sphinx 0.9.9 中使用 SPH_MATCH_EXTENDED2 匹配模式,我想编写一个搜索查询来查找在特定字段中有任何内容的所有记录。我尝试了以下方法但没有成功:
@MyField *
@MyField !""
我认为我可以在我的索引中添加一个字段,专门检查这个并针对那个进行查询,但我希望拥有比这更大的灵活性——能够通过查询语法。
有什么想法吗?
【问题讨论】:
标签: sphinx
很简单,只需在 sphinx 配置中的 sql_query 中添加常量:
sql_query = SELECT `id`, `title`, 1 as `all` FROM table
那么您可以在扩展查询模式下使用简单的查询:
@all "1"
它可以工作
【讨论】:
您可以在不更新/更改数据库的情况下执行此操作——只需修改构建索引/源的 sql_query。例如
sql_query = SELECT id, \
IF(title!='',title,'this_field_is_actually_blank') \
FROM table
然后运行之前发布者的评论,只需在 sphinx 查询中使用否定。
或者,您可以创建一个可以过滤的动态 sphinx 属性。例如
sql_query = SELECT id, \
title, \
IF(title!='',1,0) AS title_is_not_blank \
FROM table
sql_attr_uint = title_is_not_blank
然后确保为每次搜索过滤title_is_not_blank=1。
或者,根据您的应用程序,如果您从不需要包含空白内容的内容,只需使用 sql_query WHERE 子句将其删除即可。例如
sql_query = SELECT id, \
title \
FROM table
WHERE title!=''
【讨论】:
使用 2 个单独的索引;一个包含所有数据,一个只包含您关心的单元格中包含数据的行,然后您可以指定在查询时使用哪个索引。
【讨论】: