検索とWordDelimiterGraphFilterFactory

トピック作成者:ks-solruserml-bot (2024/05/23 11:27 投稿)
4
CloseClose

(The bot translated the original post https://lists.apache.org/thread/mj9cprosssy73stn6gx4lw8kfyop57mn into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは、

私は、プロジェクトID用の自動提案フィールドを作成しようとしています。ngramsとWordDelimiterGraphFilterFactoryを使用して、単語の番号の境界で分割します。

IDには、nihr123456、12/34/567、DRF-2018-11-ST2-062など、さまざまな形式があります。

私がやろうとしていることは、ユーザーが数字部分、アルファベットの文字、または両方を入力して、すべてを一致させることを許可することです。基本的な自動提案は機能していますが、クエリがすべての構成要素の一部に一致するがすべてに一致しない問題があります。例えば:

DRF-2018-11と入力すると、以下が一致します:

DRF-2018-11-ST2-062
PB-PG-0909-20188
CS-2018-18-ST2-005

最初のものは正しいですが、DRF、2018、および11が一致します。2番目と3番目のものは望みません。IDにはDRFや11が含まれていません。この問題をSolrの設定で解決する方法はありますか、それともコードでIDを手動で分割し、IDがDRF AND idが2018 AND idが11であるクエリを構築する必要がありますか?

以下が私のフィールドタイプの構成です:

<fieldType name="ngram_award_id" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.FlattenGraphFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="7"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

ありがとうございます
Shaun

返信投稿者:ks-solruserml-bot (2024/05/23 11:27 投稿)

q.op = AND は有用かもしれません。WordDelimiterGraphFilterFactory によって分割された部分が 'AND' で結合されます。

返信投稿者:ks-solruserml-bot (2024/05/23 11:28 投稿)

こんにちは、Susmit

それがうまくいかなかったようですね。何か間違っているのか分かりません。最終的に、着信文字列を数字と文字列に分割するために正規表現を書き、クエリを手動で構築することにしました。今はすべてうまく動作しています。

ありがとう
Shaun

返信投稿者:ks-solruserml-bot (2024/05/23 11:51 投稿)

Solrリファレンスガイドによると、最後にフラット化グラフフィルターを忘れています。これは使用するすべてのグラフフィルターに必要です:

<filter class="solr.FlattenGraphFilterFactory"/> <!-- グラフフィルターの後にインデックス解析器で必要 -->
返信投稿者:ks-solruserml-bot (2024/05/23 11:51 投稿)

ありがとう。確かめてみます。
Shaun

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?