在Solr中进行AND / OR搜索的问题

时间:2015-03-26 12:59:20

标签: solr

我在solr搜索中遇到了一个奇怪的问题或意外行为。

我正在寻找两个术语" Goethe"和"席勒",像这样:

http://localhost/solr/select/?&q=abstract:%28goethe%20or%20schiller%29&indent=true

虽然此搜索工作正常,但我并不想仅仅查看"摘要"领域,但在所有领域。所以我想我会搜索

http://localhost/solr/select/?&q=goethe%20schiller&indent=true

但这仅返回两个术语出现(AND)的命中。

这看起来很奇怪,因为我没有定义"和#34;成为schema.xml中的defaultOperator。即使我明确定义" OR"那里或尝试像

http://localhost/solr/select/?&q=goethe%20schiller&indent=true&q.op=OR

我没有得到理想的结果,仍然只有两个术语出现的结果。总结:除了明确定义的字段外,我无法执行OR搜索。

我有什么选择吗?我可以定义defaultOperator吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

回答我自己的问题:是的,还有另一种选择。如果

<str name="mm">100%</str>

在requestHandler中设置为100%,这等于“AND”,而0%等于“OR”。我有这个设置,似乎它是在旧版本的Solr中完成的方式。

很抱歉给您带来不便。

答案 1 :(得分:0)

对于solr版本5.1.0,在schema.xml中指定了默认运算符。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@EnableAutoConfiguration
@ComponentScan
@RestController
@RefreshScope
public class ClientApp {
    @Value("${bar:World!}")
    String bar;

    @RequestMapping("/")
    String hello() {
        return "Hello " + bar + "!";
    }

    public static void main(String[] args) {
        SpringApplication.run(ClientApp.class, args);
    }
}

如果要对搜索查询使用AND或OR而不是默认值,可以为其定义查询解析器:

<solrQueryParser defaultOperator="OR"/>

对于旧版本的solr,是的,您必须指定mm(最小'应该'匹配)值。有关mm字段的详细信息,请参见here