0

私はSolrとの統合を開始し、問題として認識していることに遭遇しました。Java APIを使用して簡単なスプレッドシートをアップロードしました(これが演習です:

 - Document, id,          value
 - Excel3,   name,        steelers
 - Excel3,   subject,     pirates
 - Excel3,   description, penguins
 - Excel3,   comments,    panthers
 - Excel3,   author,      panthers

)。

これを使用して、最初の列を「ドキュメント名」として使用し、2番目の列をインデックスを作成するドキュメントのフィールドとして使用し、3番目の列をインデックス付きデータとして使用しました。これらのフィールドはすべてschema.xmlにすでに存在しますが、設定方法は次のとおりです。

<field name="id" type="string" indexed="true" stored="true" required="true" />
<field name="name" type="text_general" indexed="true" stored="true"/>
<field name="subject" type="text_general" indexed="true" stored="true"/>
<field name="description" type="text_general" indexed="true" stored="true"/>
<field name="comments" type="text_general" indexed="true" stored="true"/>
<field name="author" type="text_general" indexed="true" stored="true"/>

ここで私の問題が発生します。たとえばスティーラーズを検索すると、元に戻りますが、ペンギンや他の多くのフィールドを検索しても、結果が返されません。ただし、description:penguinsを実行すると、期待どおりに結果が返されます。

:の前の部分が一部のフィールドに必要であるが、他のフィールドには必要ない理由を誰かが理解するのを手伝ってもらえますか?

検索例:solr / select?indent = on&q = penguins&wt =xml----結果を返しません

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">0</int>
        <lst name="params">
            <str name="indent">on</str>
            <str name="q">penguins</str>
            <str name="wt">xml</str>
        </lst>
    </lst>
    <result name="response" numFound="0" start="0"/>
</response>

solr / select?indent = on&q = description:penguins&wt = xml

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">18</int>
        <lst name="params">
            <str name="indent">on</str>
            <str name="q">description:penguins</str>
            <str name="wt">xml</str>
        </lst>
    </lst>
    <result name="response" numFound="1" start="0">
        <doc>
            <str name="author">panthers</str>
            <str name="comments">panthers</str>
            <str name="description">penguins</str>
            <str name="id">Excel3</str>
            <str name="name">steelers</str>
            <str name="subject">pirates</str>
        </doc>
    </result>
</response>
4

1 に答える 1

2

デフォルトのクエリパーサーは、デフォルトのフィールドをクエリします。デフォルトのフィールドは、次のようにschema.xmlで指定できます。http: //wiki.apache.org/solr/SchemaXml#The_Default_Search_Field

DisMaxパーサーの使用に関する@FrankFamerのコメントは、この問題の本当の解決策だと思います。そうは言っても、実際に見た2つの回避策は次のとおりです。

1.検索するすべてのフィールドの値を含む、インデックスが作成され、保存されない追加のcopyFieldを作成し、そのフィールドをデフォルトとして指定します。schema.xmlファイルでは次のようになります。

<field name="myhugedefaultfield" type="text" indexed="true" stored="false" multiValued="true"/>

<copyField source="name" dest="myhugedefaultfield"/>
<copyField source="subject" dest="myhugedefaultfield"/>
<copyField source="description" dest="myhugedefaultfield"/>

<defaultSearchField>myhugedefaultfield</defaultSearchField>

2.ユーザーが編集した構文を変更し、ペンギンのクエリを(name:penguins)OR(subject:penguins)OR(description:penguins)のクエリに変換します。

于 2012-08-31T18:52:04.733 に答える