0

「Good」、「Microwave」、「Good Microwave」を含むすべてのドキュメントを取得するために、1つの回避策を実行しました。qパラメータとして「GoodMicrowave」を渡す場合は、正しい方向に進むかどうかをガイドしてください。

以下のように、スキーマに2つのフィールドタイプ(text_generalとshingleString)を定義しました。

<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" />        
        <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.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

<fieldType name="shingleString" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PositionFilterFactory" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.ShingleFilterFactory" outputUnigrams="true" outputUnigramIfNoNgram="true" maxShingleSize="99"/>
    <filter class="solr.PositionFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

次に、インデックスを作成しているときに、これらすべてのフィールドを以下のような2つの異なるコピーフィールドに追加します。

<field name="SearchableField" type="shingleString" indexed="true" stored="false" multiValued="true"/>
    <copyField source="ProductName" dest="SearchableField"/>
     <copyField source="ProductDesription" dest="SearchableField"/>
    <copyField source="Product Feedback" dest="SearchableField"/>

<field name="SearchableField1" type="text_general" indexed="true" stored="false" multiValued="true"/>
    <copyField source="ProductName" dest="SearchableField1"/>
     <copyField source="ProductDesription" dest="SearchableField1"/>
    <copyField source="Product Feedback" dest="SearchableField1"/>

そして今、SearchableFieldとSearchableField1の両方のフィールドでクエリを実行している場合、「Good」、「Microwave」、または「GoodMicrowave」を含むすべてのドキュメントを取得しています。以下は、すべてのドキュメントを取得するために使用しているクエリです。q = SearchableField%3AGood + Microwave%0ASearchableField1%3AGood + Microwave

しかし、「Good Microwave」というフレーズ全体を含むドキュメントは、非常に低いスコアを取得しています。私のアプローチが正しければ、フレーズ全体を含むドキュメントでより高いスコアを取得するように誰かが私を導くことができますか?

または、誰かがこれを達成するために私を導くことができますか?

4

2 に答える 2

0

こんにちは、フレーズを検索するためのフィールドタイプshingleStringの「suggestercomponent」リクエストハンドラを使用した簡単なクエリを使用できます。クエリ構文に集中する必要があります。

 http://localhost:8983/solr/suggest?wt=xml&indent=true&spellcheck=true&spellcheck.q=usrsearchphrase


 <fieldType name="shingleString" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PositionFilterFactory" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.ShingleFilterFactory" outputUnigrams="true" outputUnigramIfNoNgram="true" maxShingleSize="99"/>
    <filter class="solr.PositionFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
于 2013-02-07T16:08:10.120 に答える
0

タイプが「text_general」のフィールドがある場合は、次を検索します。q =goodmicrowave「good」または「microwave」のいずれかが含まれるドキュメントを検索します。「q="goodmicrowave"」を検索すると、両方の用語が隣り合って含まれているドキュメントが見つかります。q="良い電子レンジ"^5良い電子レンジは、いずれかの用語を含むすべてのドキュメントを検索しますが、用語が隣り合って含まれているドキュメントを後押しします。

于 2013-02-12T19:53:50.663 に答える