質問

いくつかのチュートリアルを読み、SolRドキュメントを参照しました。しかし、一つのことは私には明らかではありません。説明させてください:

次のドキュメントに索引付けされることを覚えましょう。

<doc>
  <field name="id">R12345</field>
  <field name="title">My title</field>
  <field name="content">My Content</field>
</doc>

このドキュメントに反して、インデックスには「Doctype」と呼ばれる1つの追加フィールドを含める必要があります。この追加のインデックスフィールドは、「完了ルール」を使用して入力する必要があります。この背後にあるアイデア:

IDが文字「R」で始まる場合、インデックスのフィールドDoctypeに文字列「Resolve」を書き込みます。 IDが文字「C」から始まる場合、文字列「貢献」を書き込みインデックス内のフィールドdoctypeに。

上記のドキュメントは、次のフィールドでインデックスで利用できるようにする必要があります。

id=R12345
title=My Title
content=My Content
docType=Resolve

私のアイデアは、このためにアナライザーを使用することです。アナライザーの結果は、通常どおりインデックスのフィールド「ID」に書き込まれます(元のテキストのコピーのみ)が、結果の「解決」または「貢献」は別のフィールドに記述する必要があります。

私の基本的な質問は、これをTEHアナライザー(Javaが切り取った)でどのように達成できるかということです。それをより複雑にするには、インデックスフィールド「Doctype」は検索可能であり、検索結果で利用できる必要があります。フィールドIDとDoctypeのスキーマはどのように見えますか?

よろしくお願いしますトビアス

役に立ちましたか?

解決

インデックス付き値のみが必要な場合、スキーマアプローチで十分です。必要な処理を実行する新しいFieldTypeを作成し、新しいタイプのフィールドを作成し、コピーフィールドを設定して値をコピーする id:

<fieldType name="doctypeField" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="([CR]).*" replacement="$1" replace="all" />
    <filter class="solr.PatternReplaceFilterFactory" pattern="C" replacement="Contribute" replace="all" />
    <filter class="solr.PatternReplaceFilterFactory" pattern="R" replacement="Resolve" replace="all" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

<field name="doctype" type="doctypeField" indexed="true" stored="false" required="false" />

<copyField source="id" dest="doctype"/>

これから保存された価値を取得しないことに注意することをお勧めします。それが必要な場合は、コンテンツソースがSQLなどの場合、SQL-Queryでそれを作成することにより、ドキュメントをSOLRに送信する前にDoctype値を把握する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top