0

基本的なSOLRインスタンスがあります

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="my-solr" version="1.5">
  <types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" indexed="true" />
    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" indexed="true"/>
  </types>

  <fields>
    <field name="id" type="string" indexed="true" stored="true" required="true" />
    <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
  </fields>

  <uniqueKey>id</uniqueKey>
</schema>

SOLR管理ページから空のクエリを発行すると、いくつかの結果が得られます。

<response>
    <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1</int>
    <lst name="params">
    <str name="indent">on</str>
    <str name="start">0</str>
    <str name="q">*:*</str>
    <str name="version">2.2</str>
    <str name="rows">10</str>
    </lst>
    </lst>
    <result name="response" numFound="5" start="0">
        <doc><str name="id">1</str><arr name="title"><str>Test</str></arr></doc>
        <doc><str name="id">2</str><arr name="title"><str>Other Test</str></arr></doc>
    </result>
</response>

しかし、クエリを発行するとtitle:"test"(構文が間違っている場合は修正してください)、何も得られません。

<response>
    <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
    <lst name="params">
    <str name="indent">on</str>
    <str name="start">0</str>
    <str name="q">title:"test"</str>
    <str name="version">2.2</str>
    <str name="rows">10</str>
    </lst>
    </lst>
    <result name="response" numFound="0" start="0"/>
</response>

ヘルプ!

4

2 に答える 2

0

スキーマで title フィールドが indexed="true" に設定されていることを確認してください。クエリで指定できるのは、インデックス付きフィールドのみです (また、store="true" を含むフィールドのみが返されるように要求できます)。

スキーマを変更した場合は、solr を再起動してすべてを再インデックスすることをお勧めします。

出力で見たものから空のクエリまで、タイトルを多値/配列として定義したようです。これはほとんどの場合意味がありません。タイトル フィールドの例:

<field name="title" type="string" indexed="true" stored="true" required="true" multiValued="false"/>

後で返す必要があるフィールドのみを「保存」する必要があることに注意してください。

于 2012-10-25T13:17:52.367 に答える
0

適切なアナライザーを使用していなかったため、期待した方法でインデックスが作成されていなかったことが判明しました。text_generalexampleに同梱されている例のタイプを使用しましたがschema.xml、それはほとんど機能します。これで十分です。ここに再現。

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
于 2012-10-25T13:43:38.253 に答える