【问题标题】:Sphinx Search exclude empty item from result狮身人面像搜索从结果中排除空项目
【发布时间】:2015-01-23 10:41:08
【问题描述】:

我有一个带有 field1、field2、field3 和 field4 的索引 abc。对于 field4 一些数据是空的。

例如:

select field1, field4  from abc  \
      order by field4 asc limit 3;

结果:

+------+---------------+
| id   | field4        |
+------+---------------+
|  142 |               |
|  149 |               |
|  154 |    test       |
+------+---------------+
10 rows in set (0.01 sec)

但我想排除 field4 的所有空项目。该怎么做?

结果应该是:

+------+---------------+
| id   | field4        |
+------+---------------+
|  154 |    test       |
+------+---------------+

【问题讨论】:

    标签: full-text-search sphinx


    【解决方案1】:

    理论上可以做到

    select field1, field4 from abc where field4 != ''
    

    现在可以过滤字符串属性。话虽如此,但不确定对空值进行过滤是否有效。

    ...因此必须安排属性以包含其他内容而不是空的。例如,在构建索引时,将 true empty 替换为“empty”或类似词。

    select field1, field4 from abc where field4 != 'empty'
    

    【讨论】:

    • sphinxql: 语法错误,意外 $undefined,期望 CONST_INT(或 4 个其他标记)接近 '"" order by field4 asc limit 3'
    • 确实,空字符串实际上不起作用。这就是为什么需要安排使用除了真正的空字符串之外的其他东西。
    • 通过与 4 个表的内部连接来收缩 sphinx 索引,因此有时该表将没有用于查询的项目。索引中的这个条目将有一个空值。由于我无法更改索引逻辑,我有什么办法可以解决这个问题吗?
    • 如果我用“空”这个词替换真正的空,全文搜索会将此“空”作为索引中的数据捕获吗? :(
    • 如果您不能更改索引,那么可能不会。虽然如果您碰巧启用了 index_field_lengths,应该可以使用字段的长度来排除空项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多