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_
添加到两个法定人数中即可!
这是
我目前有一个像这样的 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_
添加到两个法定人数中即可!