下面的描述,都是在eDisMax模式下进行讨论的。
1. 普通搜索
solr的默认设置中,关键词之间是or关系。
<solrQueryParser defaultOperator="OR"/>
例如搜索"cpu memory",其实是按照cpu和memory分别去doc的各fields中匹配,然后将cpu和memory匹配的分数相加,得到整个查询的score。 这里有一点是与预期不同的,如果某一个关键词没有任何匹配,那么整个的score也是0, 而不是简单忽略掉这个没有匹配的关键词。例如cpu没有任何匹配,那么搜索"cpu memory"返回的结果也是空,而不是返回匹配"memory"的结果。
出现这一点的原因是DisMax的参数mm,默认值是100%,即要求所有关键词都要有匹配,否则将doc从结果集中去掉。
参考文档: http://wiki.apache.org/solr/DisMaxQParserPlugin#mm_.28Minimum_.27Should.27_Match.29
2. 带or的搜索
如果搜索"cpu or memory",score的计算方式和普通搜索一样,但是返回的结果集是"cpu"和"memory"的合集。
3. phrase search
单纯的phrase search,可使用引号将关键词引起来,solr会认为phrase,完全按照关键词进行查询。
4. 混合phrase和普通搜索
可使用or把普通搜索和phrase连接起来。例如
cpu memory or "cpu memory"^30
其中"^30"是为了phrase匹配的结果优先级更高。
参考文档:http://solr.pl/en/2010/07/14/solr-and-phrasequery-phrase-bonus-in-query-stage/