返回单词在两列中匹配或在一列中匹配而另一列为空的行?

时间:2015-03-01 03:32:15

标签: sphinx

这是another question I recently asked的后续行动。

我目前有一个像这样的SphinxQL查询:

SELECT * FROM my_index
WHERE MATCH(\'@field1 "a few words"/1 @field2 "more text here"/1\')

但是,我仍然希望在行中某个字段为空的情况下匹配行。

例如,假设数据库中存在以下行:

field1        | field2
-----------------------
words in here | text in here
              | text in here

上面的查询将匹配第一行,但它与第二行不匹配,因为仲裁运算符指定每个字段必须有一个或多个匹配。

我问的可能吗?

我正在尝试使用的实际查询在Barry Hunter's answer中提供给我之前的问题:

sphinxQL> SELECT *, WEIGHT() AS w FROM index 
   WHERE MATCH('@tags "cute hairy happy"/1 @tags2 "one two thee"/1') AND w = 2 
   OPTION ranker=expr('SUM(IF(word_count>=IF(user_weight=2,tags2_len,tags_len),1,0))'), 
    field_weights=(tags=1,tags2=2);

1 个答案:

答案 0 :(得分:1)

第一个问题是sphinx没有索引"空"所以你无法搜索它。 (实际上field_len属性将为零。但是将属性过滤器与MATCH()结合起来可能很困难。

...所以安排空来做索引

sql_query = SELECT id,...,IF(tags='','_empty_',tags) AS tags FROM ... 

然后修改查询。碰巧你的仲裁搜索很简单!

@field1 "a few words _empty_"/1

它只是另一个词。但是更复杂的查询只需要与该单词进行“或”运算。


然后让它在您的复杂查询中工作。但幸运的是,它真的很容易。 _empty_只是另一个词。在字段为空的情况下,一个单词将匹配。 (即字段中没有单词,不在查询中)

所以只需将_empty_添加到两个法定人数中即可!