java - 优化 Solr 搜索,获得精确匹配?

标签 java solr lucene

下午的伙计们,

是的,我正在使用 Solr 为网站构建一个相当复杂的(无论如何对我而言)搜索系统,尽管我认为这个问题非常简单......

我有两个搜索条件,位置和类型。我想返回与类型完全匹配的结果(字母到字母,无一异常(exception)),以及位置。

我当前的搜索查询如下

../select/?q=location:N1 type:blue&rows=100&fl=*,score&debugQuery=true

这首先返回所有与 N1 匹配的蓝色类型,然后返回与 N1 匹配的任何类型,这与我所追求的相反。这两个字段在 Solr 模式中都设置为 textgen。

有什么指点吗?

欢呼声

最佳答案

默认情况下,Solr 使用 OR 运算符来组合查询项。如果您只想要包含 location:N1 AND type:blue 而不是 location:N1 OR type:blue 的结果,则需要更改运算符。更改此设置的最简单方法是在查询时向 URL 添加附加参数 q.op=AND:

../select/?q=location:N1 type:blue&rows=100&fl=*,score&debugQuery=true&q.op=AND

您还可以通过编辑 schema.xml 文件为所有查询更改此设置;寻找

<solrQueryParser defaultOperator="OR"/>

并将其更改为

<solrQueryParser defaultOperator="AND"/>

您可能还想将 type 字段的字段类型更改为未标记化的内容,例如 string。这将确保该字段的匹配是准确的。

<field name="type" type="string" indexed="true" stored="true"/>

关于java - 优化 Solr 搜索,获得精确匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2745930/

相关文章:

elasticsearch - 如何在Nutch中使用Elasticsearch 5.x/如何在Elasticsearch 5中索引HTML网页?

java - Solr:从字段中删除双引号字符

solr - 在 Solr 索引中查找总术语数

elasticsearch - 查询字符串查询-两个字段必须匹配

java - Java Servlet 容器在哪里

java - 为什么 session.persist() 在我的程序中不起作用?

java - 如何用另一个输出替换控制台中的最后一个输出?

java - 如何在 Jasmine 中打印长条?

请求数据的 Java 弹出窗口

.net - 快速中缀搜索