1

「fieldname:query」構文を使用せずにクエリが特別なフィールドで見つかった場合、Solr3.4で検索結果を増やすことができるかどうか疑問に思っています。

説明させてください:

インデックスにいくつかのフィールドがあります。そのうちの1つは「略語」という名前で、AVZ、JSP、DECTなどのテキストで埋められています...

純粋に「AVZ」を検索したときに結果を見つけることができるように、私は追加しました

<copyField source="abbreviation" dest="text"/>

私のschema.xmlで。フィールドテキストは私のdefaultSearchFieldです。

これは私の意見では最善の解決策ではありません。そこで、すべてのフィールドで「AVZ」を検索でき、フィールドの省略形で文字列が見つかった場合は、結果エントリをブースト(スコアを上げる)して、次の場所にリストされるようにする必要があるかどうかを調べようとしています。結果リストの最初のエントリ。クエリとしてabbreviation:AVZAVZを使用するのと同じになります。

私が考えることができる他の可能性は、クエリを分析することです。また、「AVZ」のような部分文字列が見つかった場合、クエリには略語:AVZが追加されます。しかし、この場合、どの略語が索引付けされているかを知ることができなければなりません。SolrJを使用してSolrインデックスからフィールドのすべての可能な用語を取得することは可能ですか?

よろしくトビアス

4

2 に答える 2

2

fieldname:term構文を使用しない場合、リクエストハンドラーを定義できます-

<requestHandler name="search" class="solr.SearchHandler" default="true">
 <lst name="defaults">
   <str name="echoParams">explicit</str>
   <str name="defType">dismax</str>
   <str name="qf">
      abbreviation^2 text
   </str>
   <str name="q.alt">*:*</str>
   <str name="rows">10</str>
   <str name="fl">*,score</str>
 </lst>
</requestHandler>

これは、dismaxクエリパーサーを使用します。edismaxも使用できます。
これにより結果が向上し、クエリはq=AVZのような単純なクエリになります。

URLのみの場合は、前述の@リンクのような特定のフィールドで一致を高めることができます

例えば

q=abbreviation:AVZ^2 text:AVZ

これにより、略語の一致で結果が向上し、ドキュメントが一番上に表示されます。

クエリを使用して、dismaxですべての結果を取得することはできません*:*
ただし、すべてのドキュメントでqパラメータを渡さないでください。q.alt=*:*すべてのドキュメントが返されます。

それ以外の場合は、をに更新defTypeedismaxます。

<requestHandler name="search" class="solr.SearchHandler" default="true">
 <lst name="defaults">
   <str name="echoParams">explicit</str>
   <str name="defType">edismax</str>
   <str name="qf">
      abbreviation^2 text
   </str>
   <str name="q.alt">*:*</str>
   <str name="rows">10</str>
   <str name="fl">*,score</str>
 </lst>
</requestHandler>
于 2011-11-02T15:00:01.333 に答える
1

Apache Solr 6.4.2:

正確なフレーズ検索のブーストが機能しない: Solrconfig.xml:

明示的

  <int name="rows">10</int>
  <str name="defType">edismax</str>

  <str name="qf">names^50</str>



  <!-- <str name="df">text</str> -->
</lst>

テストに使用されるSolrクエリ: q=(names:alex%20pandian)&wt=json&debugQuery=on

デバッグモードでは、

"parsedquery_toString": "+((names:alex((names:pandian)^ 50.0)))()"

それは2番目の単語からのみ用語を後押ししています。この場合、パンディアンだけがブーストされますが、アレックスはブーストされません。

于 2017-04-11T12:47:08.613 に答える