不指定字段名称查询Solr

15

我刚开始使用Solr,可能有些东西我还没掌握。

我还没有修改示例模式文件,并导入了一些样例数据。我也设置了LocalSolr,看起来一切都很正常。

我的问题只是在通用的查询Solr方面。我有一个文档,其中名称字段设置为tom。我一直在查看配置文件,但就是想不出哪里错了。许多字段都被索引和存储,而且我可以在管理中看到这些值,但我无法正确地进行查询。 我尝试了各种查询(http://server.com/solr/select/?q=value),以下是结果:

**Query:** ?q=tom
**Result:** No results

**Query:** q=\*:\*
**Result:** 10 docs returned

**Query:** ?q=*:tom
**Result:** No results

**Query:** ?q=name:tom
**Result:** 1 result (the doc with name : tom)

我希望能够让第一个案例(?q=tom)成功运行。对于可能出错的原因以及如何进行更正,欢迎提出任何建议。

6个回答

17

在你的schema.xml中将<defaultSearchField>设置为name

<defaultSearchField>用于Solr在解析查询时识别应在查询中搜索哪个字段名称,当未使用显式字段名称时。

你可能还想查看(e)dismax


太好了!这正是我所需要的。我之前没有看到这个选项,现在有一堆复制字段指向一个大的“文本”字段就很有意义了。非常感谢! - Tim Ridgely
我已经在我的solconfig.xml文件中进行了更改,我正在使用SOLR 7.2.0。 - Zeeshan Ajmal

6
我刚刚遇到了一个类似的问题...我已经定义了多个字段(这些字段在schema.xml中不存在)来描述我的文档,并且想要在文档的多个字段上进行搜索/查询,而不仅仅是其中的一个字段(就像上面提到的“name”一样)。
为了实现这一点,我创建了一个新字段(“compoundfield”),然后将我定义的字段放入/复制到其中(就像Solr分发的schema.xml文档中的“text”字段一样)。这会导致以下内容: coumpoundfield定义:
<field name="compoundfield" type="text_general" indexed="true" stored="false" multiValued="true"/>

defaultSearchField:

<!-- field for the QueryParser to use when an explicit fieldname is absent -->
<defaultSearchField>compoundfield</defaultSearchField>

<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<solrQueryParser defaultOperator="OR"/>

<!-- copyField commands copy one field to another at the time a document
    is added to the index.  It's used either to index the same field differently,
    or to add multiple fields to the same field for easier/faster searching.  -->
<!-- ADDED Fields -->
<copyField source="field1" dest="compoundfield"/>
<copyField source="field2" dest="compoundfield"/>
<copyField source="field3" dest="compoundfield"/>

这对我来说很好用,但我不确定这是否是执行“多字段”搜索的最佳方法...
干杯!

2

在较新版本的lucene/solr中,当前解决方案已被弃用。要更改默认搜索字段,请使用df参数或更改所在的字段:

  <initParams 
path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
    <lst name="defaults">
      <str name="df">default_field</str>
    </lst>
  </initParams>

solrconfig.xml文件中

请注意,我使用的是非托管模式和Solr 7.0.0版本进行编写。


2

转念一想,使用copyField到一个合并字段可能是更简单的选择。 - worldsayshi

0

尽管设置默认搜索字段非常有用,但我不明白为什么不直接使用solr查询语法:

......./?q=name:tom

or

......./?q=:&fq=name:tom


0

浏览solr教程绝对值得你的时间: http://lucene.apache.org/solr/tutorial.html

我猜“name”字段没有被索引,所以你不能在它上面搜索。你需要改变模式使其被索引。

同时确保你的XML实际上与模式相匹配。所以如果你在XML中添加了一个名为“name”的字段,但是模式不知道它,那么Solr将忽略该字段(即它不会被“存储”或“索引”)。

祝好运


1
该字段肯定已经建立索引了。否则,我列出的一些查询就无法执行,对吧?如果我理解文档正确的话,类似于 name:tom 这样的查询是行不通的。 - Tim Ridgely
是的,Mauricio 是对的,你需要在 solrconfig 中指定 defaultSearchField。如果你正在使用 DisMax(它可以同时搜索多个字段),还有另一个名为 "qf" 的设置。 - mlathe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接