0

Solr Grouping の結果を使用しています。しかし、それは間違った振る舞いをします。

ここに画像の説明を入力

私は電子メールフィールドのベースにグループ化しました。私のデータベースには、メールアドレス「ashhaf63@hotmail.com」の行が2つありますが、SOLRは7147 numFoundを示していますが、これはもちろん間違っています.2である必要があります.

「ashhaf63@hotmail.com」のような特定の電子メール アドレスをグループ化して検索しようとすると、完璧な結果が表示され、正しい numFound 属性に 2 が表示されます。

ここに画像の説明を入力

Solrスキーマのフィールドタイプが原因だと思います。最初はテキストフィールドタイプを使用していましたが、現在は独自のフィールドタイプに変更しています。独自のフィールド タイプを定義し、独自のフィールド タイプを使用しています。

ここに画像の説明を入力

ここに画像の説明を入力

自分のフィールド タイプを使用した後、同じ問題に直面しています。

4

1 に答える 1

2

グループ化の応答を見ると、7147 個のドキュメントと一致したことがわかります。これは、グループが、<str name="groupValue">hotmail</str>電子メール アドレス全体ではなく、アドレスに「hotmail」を含むすべての電子メールで構成されているためです。この動作は、フィールドの値が "ashhaf63@hotmail.com" のように完全な文字列としてインデックス付けされることを期待しているためですが、fieldType の定義からemailフィールド値のトークン化を行っているためです。その結果、そのフィールドに複数のインデックス付きの値が生成されます。具体的には、英数字以外のすべての文字で値を分割するStandardTokenizerFactoryです。そのため、同じメール アドレスが「ashhaf63」、「hotmail」、「com」という 3 つの個別の値としてインデックス化されます。

このため、次のような単純な文字列 fieldType を使用する新しいフィールドを作成することをお勧めします。

<!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />

次に、次のような新しいフィールドを作成します。

<field name="emailaddress" type="string" stored="true" indexed="true"/>

次に、この新しいemailaddressフィールドでグループ化を実行します。これにより、電子メール アドレスの値全体がグループ化されます。

于 2012-11-13T13:20:15.860 に答える