Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Solr/SolrJ中搜索所有字段_Java_Solr_Solrj - Fatal编程技术网

Java 在Solr/SolrJ中搜索所有字段

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

有没有一种简单的方法可以构建一个查询,使用一个对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服务器的一次调用中实现这一点吗?如何实现?

这最好在模式本身中实现。定义
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>