代码之家  ›  专栏  ›  技术社区  ›  Joe Lencioni

是否有一种方法可以查询具有非空特定字段的斯芬克斯记录?

  •  4
  • Joe Lencioni  · 技术社区  · 14 年前

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

    @MyField *
    @MyField !""
    

    我认为我可以在索引中添加一个字段,专门检查这个字段并针对那个字段进行查询,但是我更希望具有比那个更大的灵活性——能够通过查询语法来完成这一点真的很好。

    有什么想法吗?

    3 回复  |  直到 13 年前
        1
  •  1
  •   Riedsio    14 年前

    您可以在不更新/更改数据库的情况下完成这项工作——只需修改构建索引/源的SQL查询即可。例如

     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查询消除它 WHERE 条款。例如

     sql_query = SELECT id, \
                   title  \
                 FROM table 
                 WHERE title!=''
    
        2
  •  2
  •   Anton Dukhanin    13 年前

    简单地说,只需在sphinx配置中将常量添加到SQL_查询中:

    sql_query = SELECT `id`, `title`, 1 as `all` FROM table 
    

    然后,您可以在扩展查询模式中使用简单的查询:

    @all "1"
    

    而且它起作用了

        3
  •  0
  •   servermanfail    13 年前

    使用两个单独的索引;一个包含所有数据,一个只包含您关心的单元格中的数据行,然后您可以指定查询时要使用的索引。