有没有办法查询Sphinx有特定字段非空的记录?

时间:2010-11-16 21:30:29

标签: sphinx

我正在使用与Sphinx 0.9.9的SPH_MATCH_EXTENDED2匹配模式,我想编写一个搜索查询,查找在特定字段中包含任何内容的所有记录。我试过以下但没有成功:

@MyField *
@MyField !""

我认为我可以在我的索引中添加一个字段,专门检查这个字段并对其进行查询,但我更愿意拥有更多的灵活性 - 通过它可以做到这一点真的很棒查询语法。

有什么想法吗?

3 个答案:

答案 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个单独的索引;一个包含所有数据,一个只包含您关心的此单元格中包含数据的行,然后您可以指定在查询时使用哪个索引。