2013-04-23 104 views
0

我有以下情况。假设我有一张这样的大桌子。Solr:如何实现这个逻辑?

Id(unique)  returnMe    desc      name   value 
1    user1   all those living in usa  country   USA 
2.    user2   all those like game   game    football 
3.    user1   my hobbies are     hobby    guitar 

现在,我如何得到结果(returnMe)以下查询。

1. For all those users who live in usa AND like guitar 
2. For all those users who live in usa OR like guitar. 

请不要修改查询。

对于我的solConfig.xml'desc','name','value'是可搜索的可索引字段。

感谢您的任何帮助。

好吧,我编辑这个解释我的逻辑..

Step 1: Break query on AND like (live in USA) AND (like guitar) 
Step 2: Then select returnMes from first query and returnMes from second query. 
Step 3: Take common returnMes, returned from first query and second query. 

有什么办法可以Solr的做到这一点。我们可以通过Solr“join”还是其他方式来完成? 我确实想在我的PHP中这样做,这将是巨大的开销。

回答

0

您将需要以某种方式修改查询。一个简单的步骤来解析查询并为其添加括号,并可能需要字段名称进行搜索。你可以合理地轻松地将这些查询到的东西,如:

(For all those users who live in usa) AND (like guitar) 
(For all those users who live in usa) OR (like guitar) 

或者你可以切出“为所有那些谁的用户”,并有简单:

(live in usa) AND (like guitar) 
(live in usa) OR (like guitar) 

和查询字段设置为value。当然,如果您的文档是value=users或者其他类似的文档,您可能会遇到问题,因为它会搜索value字段中的每个字词。

如果你确实想用自然语言工作,那么你可以看看OpenNLP项目。

+0

嘿感谢您的建议。我已经编辑了一些问题来解释我的逻辑。你可以请看看这个来帮助我。 – voila 2013-04-24 04:12:18

+0

为什么要手动合并结果? Solr查询解析器支持布尔逻辑。为什么不通过查询'(住在美国)和(如吉他)' – femtoRgon 2013-04-24 14:03:46

+0

因为'AND'试图找到(住在美国)和(如吉他)文件明智(两个查询都应该出现在文件中)。例如 - 如果我只是在上面的表上做AND,那么我不会得到任何结果,因为没有任何文档满足这两个查询。但我的要求是获得“用户1”查询“住在美国和业余爱好是吉他”..任何解决方案。我坚持:( – voila 2013-04-24 17:33:55