1

SolrはLuceneの全文検索を使用します。すべてをテキストに変換する必要があるということですか?たとえば、次のようなファイルがあります。

   <field name="rollno" type="int" indexed="true" stored="true"/>
   <field name="name" type="string" indexed="true" stored="true"/>

そして、これらのファイルに基づくドキュメント、

 <doc>
      <field name="id">1</field>
      <field name="rollno">32</field>
      <field name="name">John Milton</field>
 </doc>

そして、私はそれらすべてをこのようなテキストに変換する必要がありますか?

<copyField source="name" dest="text"/>
<copyField source="rollno" dest="text"/>

そして私の検索ハンドラーは、

<requestHandler name="/select" class="solr.SearchHandler">
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <int name="rows">100</int>
       <str name="df">text</str>
     </lst>
</requestHandler>

私の疑問を明確にしてください。

4

3 に答える 3

1

すべてをテキストに変換する必要はありません。

フィールドの内容によって異なります。
通常、より多くのコンテンツを含むフィールドにはテキストフィールドタイプを使用します。
テキストフィールドを使用すると、コンテンツを検索可能にするために多くの処理を行うことができます

-小文字のフィルターを適用して検索で大文字と小文字を区別しないようにすることができます-同義語を適用してビークル、自動車などの同義語をマークすることが
できます-ステミングを適用してルートで単語を検索できるようにすることができ
ます..。。

You don't want usually the same anaylsis to be applied to all the fields.
e.g. you don't want the stemmer to be applied on person name or author names as it may be incorrect matches.

For fields which are integer and string you can still search on them without marking them as text if the fields are indexed.

Copy field would need to copy all your content to a field with a single field type.
If you don't want to use copy field use can use edismax parser and still search on mulitple fields.

<requestHandler name="standard" class="solr.SearchHandler" default="true">
    <lst name="defaults">
        <str name="defType">edismax</str>
        <str name="echoParams">explicit</str>
        <str name="qf">rollno name</str>
        <str name="q.alt">*:*</str>
    </lst> 
</requestHandler>
于 2012-08-27T10:41:31.430 に答える
0

あなたはこれを間違えました。copyFieldはそれをテキストに変換しません。nameという名前のフィールドからtextという名前のフィールドに値をコピーします。これは通常、すべての値を含むフィールドを持つために使用されます。このフィールドは通常、デフォルトの検索フィールドです。これが行われる理由を説明しましょう:

上記の2つのフィールドを投稿している場合は、どちらがデフォルトの検索フィールドであるかを宣言する必要があります。名前を言いましょう。クエリ構文を使用せずに通常の式を使用してサーバーにクエリを実行すると、フィールド名のみが検索されます。ただし、通常は、フィールドrollnoも検索する必要があります。クエリ構文なしでこれを行うには、別のフィールド(この場合はtextという名前)を宣言します。次に、フィールド名とフィールドrollnoからフィールドテキストに値をコピーし、それをデフォルトの検索フィールドとして定義します。John Miltonまたは42を検索すると、ドキュメントが見つかります。うまくいけば、これはあなたに少し役立つことができます。

于 2012-08-27T10:45:59.457 に答える
0

schema.xmlファイルで、fieldNameが設定されていない場合にデフォルトでクエリを検索するために使用されるdefaultSearchFieldを設定します。

<defaultSearchField>text</defaultSearchField>

requestHandlerのdfパラメーターは、同様の目的で使用されます。これは、schema.xmlファイルで定義されているデフォルトのフィールドをオーバーライドします。

copyFieldを使用してこのパラメーターに複数のフィールドを追加すると、タイプに関係なくすべてのフィールドを検索できます。

したがって、次のようにクエリを作成すると、デフォルトのフィールドで検索されます。

http://localhost:8080/solr/select/?q=searchText

特定のフィールドで検索する場合は、次のようにクエリを作成する必要があります。次のクエリは、rollnoフィールドを検索します。

http://localhost:8080/solr/select/?q=rollno:32
于 2012-08-27T10:38:05.210 に答える