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

Return rows where words match in two columns OR in match in one column and the other column is empty?

这是 的后续。

我目前有一个像这样的 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

上述查询会匹配第一行,但不会匹配第二行,因为仲裁运算符指定每个字段必须有一个或多个匹配项。

我问的可能吗?

我尝试使用的实际查询已在 中提供给我之前的问题:

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);

第一个问题是 sphinx 没有索引 "empty" 所以你不能搜索它。 (实际上 field_len 属性将为零。但是很难将属性过滤器与 MATCH() 结合使用)

...所以安排 empty 成为索引

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

然后修改查询。碰巧你的法定人数搜索很简单!

@field1 "a few words _empty_"/1

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


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

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