【问题标题】:Is there a way to query Sphinx for records that have a particular field that is not empty?有没有办法在 Sphinx 中查询具有非空特定字段的记录?
【发布时间】:2010-11-16 21:30:28
【问题描述】:

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

@MyField *
@MyField !""

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

有什么想法吗?

【问题讨论】:

    标签: sphinx


    【解决方案1】:

    很简单,只需在 sphinx 配置中的 sql_query 中添加常量:

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

    那么您可以在扩展查询模式下使用简单的查询:

    @all "1"
    

    它可以工作

    【讨论】:

      【解决方案2】:

      您可以在不更新/更改数据库的情况下执行此操作——只需修改构建索引/源的 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!=''
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2014-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-09
          • 1970-01-01
          • 2021-10-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多