2016-02-12 67 views
0

条件我想通过某种方式将它们分组,以限制结果,限制结果上或狮身人面像

这个查询应该试图让事情说清楚:

@namee(“相机”)限5 | @namee(“手机”)限制5 | @namee(“洗衣机”)限制5 | @namee(“图形卡”)限制5

其中namee是列

基本上我试图限制基于特定条件的结果/。 这可能吗?任何替代方式做我想做的事情。

我对狮身人面像2.2.9

回答

1

没有狮身人面像语法直接做到这一点。

最简单的方法就是直接在应用程序中直接进行4个单独的查询和'UNION'。性能不会太糟糕。


...如果你真的想要在狮身人面像中做到这一点,可以明确的几个技巧来完成,但它会变得非常复杂。

需要创建4个单独的索引(或最多可以满足您的条件!)。每个都有相同的数据,但是这个字段被称为不同的东西。 (他们互相重复!)你还需要在每一个属性(更多关于为什么后来)

source str1 { 
    sql_query = SELECT id, namee AS field1, 1 as idx FROM ... 
    sql_attr_unit = idx 

source str2 { 
    sql_query = SELECT id, namee AS field2, 2 as idx FROM ... 
    sql_attr_unit = idx 

... etc 

然后创建这4个指标的单一分布式索引。

然后可以运行一个查询来获取所有结果还挺神奇地联合在一起......

MATCH('@@relaxed @field1 ("Cameras") | @field2 ("Mobiles") | @field3 ("Washing Machine") | @field4 ("Graphic Cards")') 

(但@@放松是很重要的,因为场是不同的。比赛必须来自不同的索引)

我们限制他们的......因为每个关键字匹配必须来自不同的指标,每个指标都有一个唯一的属性,属性标识项匹配什么....

在狮身人面像

,有一个很好的GROUP N BY你只在g从每个属性的一定数量的结果,所以可以做...(把所有的一起)

SELECT *,WEIGHT() AS weight 
FROM dist_index 
WHERE MATCH('@@relaxed @field1 ("Cameras") | @field2 ("Mobiles") | @field3 ("Washing Machine") | @field4 ("Graphic Cards")') 
GROUP 4 BY idx 
ORDER BY weight DESC; 

简单吗?

(注意,如果想从每个索引中选择4个,如果想要不同的限制要复杂得多)