是否有一种简单的方法来构建一个查询,使用一次Solr调用来搜索Solr索引中的所有字段?
我可以通过单独定义每个字段来搜索所有字段中的一些文本:
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服务器来完成此操作吗?怎么样?
答案 0 :(得分:2)
这最好在架构中完成。定义fullSearch
字段(使用相应的fieldType),然后使用copyField指令将要搜索的所有字段复制到此新字段中。 (重建索引)。然后在您的查询中,您只搜索这一个字段。
答案 1 :(得分:0)
如果您使用的是Solr 3.6,则可以使用用户字段。有关详细信息,请参阅this JIRA问题和this Wiki页面。
您需要将以下内容添加到查询或solrconfig.xml
uf =“* allFields”
f.allFields.qf =“customerName customerAddress customerNotes”
之后,只需在字段allFields
中进行搜索,它就会搜索3个字段customerName customerAddress customerNotes
。您可以根据需要创建任意数量的此类用户字段。
答案 2 :(得分:0)
我可以看到您已经在使用 Extended DisMax Query Parser ,它是为此目的而设计的。您应该阅读有关 Dismax Query Parser 的文档,这是eDismax的某种父亲。 eDismax共享dismax查询解析器提供的大多数功能。
您可以在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>
这样你的java代码就会减少,因为queryType默认已经定义为edismax。
String textToSearchFor = "someText";
HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr");
SolrQuery query = new SolrQuery();
query.setQuery(textToSearchFor);
QueryResponse rsp = solrServer.query( query );