Java 在Solr/SolrJ中搜索所有字段
有没有一种简单的方法可以构建一个查询,使用一个对Solr的调用来搜索Solr索引中的所有字段 通过分别定义每个字段,我可以在所有字段中搜索一些文本:Java 在Solr/SolrJ中搜索所有字段,java,solr,solrj,Java,Solr,Solrj,有没有一种简单的方法可以构建一个查询,使用一个对Solr的调用来搜索Solr索引中的所有字段 通过分别定义每个字段,我可以在所有字段中搜索一些文本: String textToSearchFor = "someText"; HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr"); SolrQuery query = new SolrQuery(); query.setQuery( "custome
String textToSearchFor = "someText";
HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr");
SolrQuery query = new SolrQuery();
query.setQuery( "customerName:" + textToSearchFor
+ " OR customerAddress:" + textToSearchFor
+ " OR customerNotes:" + textToSearchFor
);
query.setQueryType("edismax");
QueryResponse rsp = solrServer.query( query );
这种方法的问题是,如果在Solr模式中添加或删除字段,我必须更新此代码。我希望设置查询请求,以便它搜索所有可用字段,而不强制我指定每个字段名
我可以在对Solr服务器的一次调用中实现这一点吗?如何实现?这最好在模式本身中实现。定义
fullSearch
字段(使用适当的字段类型),然后使用copyField指令将所有要搜索的字段复制到此新字段中。(重建索引)。然后在查询中,只在这一个字段中搜索。这最好在模式本身中完成。定义fullSearch
字段(使用适当的字段类型),然后使用copyField指令将所有要搜索的字段复制到此新字段中。(重建索引)。然后在查询中,只在这一个字段中搜索。如果您使用的是Solr 3.6,则可以使用用户字段。有关详细信息,请参见JIRA问题和Wiki页面
您需要将以下内容添加到查询或solrconfig.xml
uf=“*所有字段”
f、 allFields.qf=“customerName customerAddress customerNotes”
之后,只需在字段
allFields
中搜索,它将在3个字段customerName customerAddress customerNotes
中搜索。您可以根据需要创建任意数量的用户字段。如果您使用的是Solr 3.6,则可以使用用户字段。有关详细信息,请参见JIRA问题和Wiki页面
您需要将以下内容添加到查询或solrconfig.xml
uf=“*所有字段”
f、 allFields.qf=“customerName customerAddress customerNotes”
之后,只需在字段
allFields
中搜索,它将在3个字段customerName customerAddress customerNotes
中搜索。您可以根据需要创建任意数量的此类用户字段。我可以看到您已经在使用扩展的Demax查询解析器,它就是为此而设计的。您应该阅读有关的文档,它是eDismax的某种父亲。eDismax与demax查询解析器提供的大部分功能相同
您可以在solrconfig.xml中为requesthandler配置默认值
<requestHandler name="standard" class="solr.StandardRequestHandler" default="true">
<!-- default values for query parameters -->
<lst name="defaults">
<str name="defType">edismax</str>
<str name="q.alt">*:*</str>
<!-- define the fields to query for here -->
<str name="qf">customerName customerAddress customerNotes</str>
</lst>
</requestHandler>
我可以看到,您已经在使用扩展的Demax查询解析器,它就是为此而设计的。您应该阅读有关的文档,它是eDismax的某种父亲。eDismax与demax查询解析器提供的大部分功能相同 您可以在solrconfig.xml中为requesthandler配置默认值
<requestHandler name="standard" class="solr.StandardRequestHandler" default="true">
<!-- default values for query parameters -->
<lst name="defaults">
<str name="defType">edismax</str>
<str name="q.alt">*:*</str>
<!-- define the fields to query for here -->
<str name="qf">customerName customerAddress customerNotes</str>
</lst>
</requestHandler>