0

Solr への 1 回の呼び出しを使用して、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 サーバーへの 1 回の呼び出しでこれを実行できますか? どのように?

4

3 に答える 3

2

これは、スキーマ自体で行うのが最適です。フィールドを (適切な fieldType で)定義しfullSearch、copyField ディレクティブを使用して、検索するすべてのフィールドをこの新しいフィールドにコピーします。(インデックスを再構築します)。次に、クエリで、この 1 つのフィールドのみを検索します。

于 2012-08-26T17:49:45.780 に答える
1

この目的のために設計されたExtended DisMax Query Parserを既に使用していることがわかります。eDismaxの父のようなものであるDismax Query Parserに関するドキュメントを読む必要があります。eDismax は、dismax クエリ パーサーが提供する機能のほとんどを共有しています。

requesthandler の solrconfig.xml 内でデフォルト値を設定できます。

<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>

そうすれば、queryType がデフォルトで edismax としてすでに定義されているため、Java コードが削減されます。

String textToSearchFor = "someText";
HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr");

SolrQuery query = new SolrQuery();
query.setQuery(textToSearchFor);
QueryResponse rsp = solrServer.query( query );
于 2013-03-12T10:09:58.977 に答える
0

Solr 3.6 を使用している場合は、ユーザー フィールドを使用できます。詳細については、このJIRA の問題およびこのWiki ページを参照してください。

以下をクエリに追加するか、solrconfig.xml

uf="* allFields"

f.allFields.qf="customerName customerAddress customerNotes"

その後、フィールドで検索するだけallFieldsで、3つのフィールドで検索されますcustomerName customerAddress customerNotes。このようなユーザー フィールドは、必要な数だけ作成できます。

于 2012-08-27T02:29:19.500 に答える