我正在使用与Sphinx 0.9.9的SPH_MATCH_EXTENDED2匹配模式,我想编写一个搜索查询,查找在特定字段中包含任何内容的所有记录。我试过以下但没有成功:
@MyField *
@MyField !""
我认为我可以在我的索引中添加一个字段,专门检查这个字段并对其进行查询,但我更愿意拥有更多的灵活性 - 通过它可以做到这一点真的很棒查询语法。
有什么想法吗?
答案 0 :(得分:2)
很简单,只需在sphinx config中添加常量到sql_query:
sql_query = SELECT `id`, `title`, 1 as `all` FROM table
然后您可以在扩展查询模式下使用简单查询:
@all "1"
并且有效
答案 1 :(得分:1)
您可以在不更新/更改数据库的情况下执行此操作 - 只需修改您的索引/源构建的sql_query即可。 e.g。
sql_query = SELECT id, \
IF(title!='',title,'this_field_is_actually_blank') \
FROM table
然后运行前一张海报的评论,只需在狮身人面像查询中使用否定。
或者,您可以创建一个可以过滤的动态sphinx属性。 e.g。
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
子句消除它。 e.g。
sql_query = SELECT id, \
title \
FROM table
WHERE title!=''
答案 2 :(得分:0)
使用2个单独的索引;一个包含所有数据,一个只包含您关心的此单元格中包含数据的行,然后您可以指定在查询时使用哪个索引。