我在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吗?
提前致谢!
答案 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