EXTENSIONS

第2回 スキーマ設定の基本|Apache Solr ハンズオンセミナー
無料

ご利用にはKandaSearchへの
ユーザー登録(無料)が必要です

Misc
第2回 スキーマ設定の基本|Apache Solr ハンズオンセミナー

最新バージョン: 1.1.0

開発者: RONDHUIT

ダウンロード数: 39

最終更新日: 2022-07-14

Copyright: RONDHUIT Co.,LTD

最新バージョン: 1.1.0

開発者: RONDHUIT

ダウンロード数: 39

最終更新日: 2022-07-14

Copyright: RONDHUIT Co.,LTD

Apache Solr ハンズオンセミナー「第2回 スキーマ設定の基本」のスライドです。

第2回 スキーマ設定の基本|Apache Solr ハンズオンセミナー

P01 表紙

第2回 スキーマ設定の基本 Apache Solr ハンズオンセミナー
株式会社ロンウイット
関口宏司 @kojisays

P02 改訂履歴

2022年5月17日 初版
2022年5月18日 ECサンプルデータの taxKbn の具体例を現状に合わせて “1” から false に修正。
2022年5月20日 エクステンション利用に関する注意事項を追加。
2022年7月14日 アンケート経由の類義語に関する質問と回答を追加。

P03 ご注意

  • 本書演習やセミナー内で使用される辞書や設定ファイルなどの「エクステンション」は、 KandaSearch の利用規約 https://kandasearch.com/policy/terms の範囲内でご利用いただけます。

P04 本日の内容

  • スキーマ設定の基本
  • フィールド型とフィールドの設定
  • 基本のフィールド型
  • Analyzerの設定
  • 日本語フィールドの設定
  • ポジションとオフセット
    • オフセット補正
  • その他
    • uniqueKey, copyField, dynamicField
  • [演習]
  • Q&A, アンケート

P05 [演習] 演習環境の準備

P06 [演習1] 検索エンジンプロジェクトの作成

これから Apache Solr のいろいろな機能を使っていきます。本セミナーでは Apache Solr 環境を簡単に準備できる KandaSearch を通じて Apache Solr を使っていきます。
そのためには、 https://kandasearch.com/ にログイン後、プロジェクトを作成します。

  1. https://kandasearch.com/ にログインします。
  2. 「プロジェクトを作成する」というボタンからプロジェクトを作成してみましょう。
    • プロジェクト名はわかりやすいものをつけましょう。日本語の名前も可能です。
    • 会社名(架空の名前でも可)などにしてもいいでしょう。
    • プロジェクト名は後から設定メニューでいくらでも変更が可能です。

P07 [演習1a] プロジェクト管理機能(オプション)

(お試しになりたい方のみお試しください。このステップを飛ばしても以降の[演習]には差し支えございません)

  1. プロジェクトメンバーに同僚の開発者を招待することができます。
    • 画面左の「メンバー」メニューから招待したい人のメールアドレスを入力して「管理者」または「ユーザー」の役割で招待できます。
  2. プロジェクトにアイコンを設定できます。
    • 画面左の「設定」メニューからプロジェクトのアイコンに使用する画像をアップロードできます。

P08 [演習2] 検索エンジンインスタンスを作成

作成したプロジェクト内に検索エンジンインスタンス、つまり Apache Solr を作成してみましょう。

  1. 画面左の「オーバービュー」メニューから「インスタンスを作成する」ボタンをクリックし、インスタンス作成ステップを開始します。
  2. プラン選択にて「一週間トライアル」(右下)を選んで次に進みます。
    • 一週間後に自動的に削除されます。
    • 「スタンドアロン」と「SolrCloud」が選択できますが、「スタンドアロン」を選びます。
  3. インスタンス情報入力にて「インスタンス名」と「インスタンスサブドメイン」、「IPアドレス範囲」を設定します。
    • 「インスタンスサブドメイン」はユニークである必要があります。プロジェクト名とインスタンス名に日本語等特殊文字を使用していない場合は、「自動生成」をクリックして自動で作成することができます。
    • 「IPアドレス範囲」に設定したIPアドレスからのみこの Apache Solr へのアクセスを許可するファイアウォールが設定されます。(最大4つ)
    • 最終確認で作成される検索エンジンインスタンスをご確認後、ボタンをクリックして作成し、1〜2分お待ちください。

P09 スキーマ設定の基本

P10 スキーマ設定の概要(managed-schema)

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.6">
  <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
  <field name="sku" type="text_ws" indexed="true" stored="true" omitNorms="true"/>
  <field name="name" type="text_ws" indexed="true" stored="true"/>
  <field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>
  <dynamicField name="*_i"  type="pint"    indexed="true"  stored="true"/>
  <dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/>

  <uniqueKey>id</uniqueKey>

  <copyField source="cat" dest="text"/>
  <copyField source="name" dest="text"/>

  <fieldType name="string" class="solr.StrField" sortMissingLast="true"/>
  <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
  <fieldType name="pint" class="solr.IntPointField"/>
  <fieldType name="pdate" class="solr.DatePointField"/>

  <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    </analyzer>
  </fieldType>

</schema>
  • <fieldType /> でフィールド型を設定
  • <field /> でフィールド型使ったフィールドを設定
  • ③ ユニークキーフィールドを設定

P11 フィールドとは?(ECデータの例)

{
  "id" : "6",
  "productCode" : "RKK0000003620",
  "productName" : "付箋(ピンク)100枚",
  "productNameKana" : "ふせん(ぴんく)100まい",
  "price" : 105,
  "taxKbn" : false,
  "makerName" : "KOKOYO",
  "makerNameKana" : "ここよ",
  "makerProduCode" : "A0BD5021436633",
  "categoryL" : "オフィス用品",
  "categoryM" : "事務用品",
  "categoryS" : "ラベル",
  "categoryFacetInfo" : "オフィス用品/事務用品/ラベル",
  "stock" : 217,
  "size" : "72mm×72mm",
  "weight" : "45",
  "unitName" : "袋",
  "salesUnit" : "1",
  "productInfo" : ["付箋、いわゆるポストイットです。", "のりの強さは製造工場によりばらつきがあります。ご了承ください。"],
  "standardDeliveryDate" : "3",
  "campaignPrice" : 0,
  "dateSince" : "2006-05-02T00:00:00Z"
}

フィールドとは、検索対象文書の構成要素で、idやproductCode, productName, … がフィールドです。
productInfo は multiValued フィールドです。

P12 フィールド型とその種類

フィールド型は<fieldType />で設定します。

<fieldType name="string" class="solr.StrField" sortMissingLast="true"/>

フィールド型には以下のように<analyzer />子要素を持つものがあります。

  • 慣習として"text_"で始まるフィールド型名を付けるため、<analyzer />子要素を持つフィールド型を本書では「テキスト系フィールド型」と総称します。
  • 一方、<analyzer />子要素を持たないフィールド型を「基本フィールド型(または非テキスト系フィールド型)」と総称することにします。
    <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
        <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        </analyzer>
    </fieldType>
    

P13 基本フィールド型

以下のような基本フィールド型があります。

  • 文字列型
    • string
      <field name="id" type="string" indexed="true" stored="true" required="true"/>
      
  • ブーリアン型
    • boolean
      <field name="done" type="boolean" indexed="true" stored="true"/>
      
  • 数値型
    • pint, plong, pfloat, pdouble
      <field name="price" type="pint" indexed="true" stored="true"/>
      
  • 日付型
    • pdate
      <field name="date" type="pdate" indexed="true" stored="true"/>
      
  • 空間検索用
    • point, location, bbox
      <field name="store" type="location" indexed="true" stored="true"/>
      

P14 [演習3] 基本フィールド型の動作を確認

ライブラリーにあるECサイトのサンプルを使ってecコレクションを作成し、サンプルデータをインデクシングします。その上でKandaSearchやSolr Admin UIを使って以下を実行してみましょう。

  1. idが10のものを検索
    • id:10
  2. 価格が1,000円〜2,000円のものを検索
    • price:[1000 TO 2000]
  3. 上記条件に加え、taxKbnがtrueのものを検索
    • price:[1000 TO 2000] AND taxKbn:true

P15 テキスト系フィールド型(1/2)

  • <analyzer />子要素で、テキスト分析の方法を細かく設定できます。
  • type属性でインデクシング時とクエリ時のテキスト分析方法を変えることもできます。
    <analyzer type="index">...</analyzer>
    <analyzer type="query">...</analyzer>
    
  • ```xml
    <analyzer>
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    

P16 テキスト系フィールド型(2/2)

コンピューターを買った

↓  
コンピューターを買った  
↓  
```<tokenizer />``` 単語分割  
↓  
コンピューター, を, 買っ, た  
↓  
```<filter />``` トークンのフィルタリングや類義語展開など  
↓  
コンピュータ, 買う, PC, パソコン

## P17 [演習4] テキスト系フィールド型の動作を確認

前の演習で作成したECサイトを使います。KandaSearch UIでの検索の場合、以下のように設定してください。

- ユニークキー:id、タイトル:productName、ボディ:productInfo、クエリパーサー:edismax

その上で、下記の検索を試してみましょう。
1. 「のり」や「ボンド」で検索
2. 「パソコン」や「パソコン」(半角カナ)で検索
3. 「青」や「ブラック」(半角カナ)で検索
4. 「黄色」や「黄」で検索 ⇒ ヒット0件
5. 「イエロー」で検索 ⇒ ヒットあり

## P18 text_ja フィールド型の設定詳細

```xml
<fieldType name="text_ja" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100">
  <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-kana.txt"/>
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="normal"/>
    <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymGraphFilterFactory" tokenizerFactory="solr.JapaneseTokenizerFactory"
            expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
  </analyzer>
  <analyzer type="query">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-kana.txt"/>
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="normal"/>
    <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
    <filter class="solr.ManagedSynonymGraphFilterFactory" managed="synonym-ja"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

P19 MappingCharFilter

CharFilterの一種で、Tokenizerの前段でmappingに指定されたファイル内容に基づき、文字を正規化します。

<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-kana.txt"/>

mapping-kana.txt

"ア" => "ア"
"イ" => "イ"
"ウ" => "ウ"
"エ" => "エ"
"オ" => "オ"
"ガ" => "ガ"
"ギ" => "ギ"
"グ" => "グ"
"ゲ" => "ゲ"
"ゴ" => "ゴ"

P20 JapaneseTokenizer, JapaneseKatakanaStemFilter, LowerCaseFilter

JapaneseTokenizer

<tokenizer class="solr.JapaneseTokenizerFactory" mode="normal"/>
  • 内蔵された辞書(IPAdic)に基づき、コスト最小法で単語列を出力する日本語形態素解析器です。
    • 緊急事態宣言 ⇒ 緊急 / 事態 / 宣言

JapaneseKatakanaStemFilter

<filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
  • minimumLength以上のカタカナ語の末尾の長音記号を削除します。
    • コンピューター ⇒ コンピュータ, サーバー ⇒ サーバ
    • マザー ⇒ マザー (※ 長さが3なので末尾の長音記号は削除されません)

LowerCaseFilter

<filter class="solr.LowerCaseFilterFactory"/>
  • アルファベットの大文字を小文字に正規化します。
    • A ⇒ a

P21 SynonymGraphFilter

シノニム(類義語)のトークンフィルターです。synonymsに指定されたファイル内容に基づき、特定シノニムに正規化または展開します。

<filter class="solr.SynonymGraphFilterFactory" tokenizerFactory="solr.JapaneseTokenizerFactory"
expand="true" ignoreCase="true" synonyms="synonyms.txt"/>

synonyms.txt

付箋, ポストイット
ボンド, のり, 接着剤
ブルー, 青
イエロー, 黄色, 黄
グリーン, 緑
ブラック, 黒
レッド, 赤
ホワイト, 白
pc, パソコン

P22 [演習5] Solr Admin UI の Analysis によるデバッグ(1)

Solr Admin UI の Analysis 画面を使うと、テキスト系フィールド(型)の動作を詳細に見ることができます。デバッグ用途でよく使われます。text_jaフィールド型を対象に、以下のキーワードを解析(Analyze)してみます。

  1. 「のり」や「ボンド」や「接着剤」というキーワード検索で、「のり」「ボンド」(半角カナ)「接着剤」を含む製品がヒットする理由を考えてみましょう。
  2. synonyms.txtが正しく設定されているにもかかわらず、「黄色」や「黄」ではヒットせず、「イエロー」でヒットする理由を考えてみましょう。

(注意)この演習では Verbose Output をオフにしておきます。

P23 [質問] 「接着 / 剤」が類義語でヒットする理由

アンケートで、「text_jaで『接着 / 剤』と単語分割される『接着剤』が『のり』でヒットするのはなぜか。text_jaで『イエロ』と出力されるため『イエロー』と『黄色』が相互ヒットしないこととの違いがわからない」というご質問をいただきました。

MCF, JT, JKSF, LCF, SGF, LBTS

P24 [回答] 「接着 / 剤」が類義語でヒットする理由(1/2)

まず前提として、類義語定義ファイルには次のように複数単語からなるキーワードも問題なく登録でき、相互ヒットさせることができます。

www, world wide web # (1)
who, world health organization # (2)

これは、類義語定義を一種のオートマトンのように保持しており、入力単語列が受理されると、当該類義語定義レコードが出力できるようになっているためです。

P25 [回答] 「接着 / 剤」が類義語でヒットする理由(2/2)

現在Luceneで提供されているSynonymGraphFilterの前身のSynonymFilterはSolrで開発されました。Solr公開当時、2-gramフィールドにおける類義語定義辞書は、前述のオートマトン構造を考慮し、ユーザーは次のように定義しなければなりませんでした。

マク クド ドナ ナル ルド, マッ ック, マク クド

これではあまりにも大変なので、tokenizerFactory機能が関口により実装され、上記のように書かなくてもすむようになりました。

<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"
        tokenizerFactory="NGramTokenizerFactory"
        tokenizerFactory.migGramSize="2" tokenizerFactory.maxGramSize="2"/>

当時のチケット(※1)を見ると、「tokenizerFactoryではなくtypeとしたらどうか」という意見が出されました。

(理想)

<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"
        type="text_2g"/>

しかしながら、「まさにtext_2g型を作成している最中に未完成のtext_2gを指定できない」というジレンマから、最初の提案通り、tokenizerFactoryでの妥協となりました。もしtokenizerFactoryではなくtypeが指定できていたら、「黄色」で「イエロー」がヒットしていたでしょう。

※1 https://issues.apache.org/jira/browse/SOLR-319

P26 その他の代表的なTokenizer

  • WhitespaceTokenizer
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>

    • ホワイトスペース(空白、タブ、改行等)を単語(トークン)境界とみなして単語列を出力するTokenizerです。
  • NGramTokenizer
    <tokenizer class="solr.NGramTokenizerFactory" maxGramSize="2" minGramSize="2"/>

    • minGramSize(デフォルトは1)とmaxGramSize(デフォルトは2)で指定された文字列長の単語列を出力するTokenizerです。
  • KeywordTokenizer
    <tokenizer class="solr.KeywordTokenizerFactory"/>

    • 入力文字列全体を1つのトークンとみなして1つの単語を出力するTokenizerです。

P27 その他の代表的なTokenFilter

  • StopFilter
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt"/>

    • wordsで指定されたファイル内の単語をストップワードとみなして取り除きます。
    • (一般的なストップワード)a, an, the, in, at, on, it, of, and, or, …
  • EnglishPossessiveFilter
    <filter class="solr.EnglishPossessiveFilterFactory"/>

    • 英語の所有格名詞の「's」を取り除きます。
  • PorterStemFilter
    <filter class="solr.PorterStemFilterFactory"/>

    • 英単語の語幹(Stem)を抽出するアルゴリズムである Porter Stemmer を実行して機械的に単語の語幹変換を行います。
    • (例)going ⇒ go、collection ⇒ collect

P28 [演習6] Solr Admin UI の Analysis によるデバッグ(2)

続けてSolr Admin UI の Analysis 画面を使って講師と共に以下のフィールド型の動作を確認しましょう。

  1. 入力文「John's dog is taking a walk.」(ジョンの犬が散歩をしている。)を以下のテキスト型を使って解析してそれぞれの違いを確認します。
    • text_ws:ホワイトスペースでトークンが出力されます。
    • text_en:ストップワード除去、小文字変換、所有格の「's」除去、語幹変換が行われます。
    • text_kwd:入力文全体が1トークンとみなされ、最後に小文字変換がされています。
  2. 入力文「Hello」をtext_ngで解析します。
    • minGramSize=1, maxGramSize=2 のデフォルトが適用されています。
  3. 同じ入力文「Hello」をtext_2gで解析します。2-gramとなっていることを確認します。

(注意)この演習では適宜 Verbose Output をオンにします。

P29 フィールドの属性

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="sku" type="text_ws" indexed="true" stored="true" omitNorms="true"/>
<field name="name" type="text_ws" indexed="true" stored="true" autoGeneratePhraseQueries="true"/>
属性 説明
indexed true と指定すると、当該フィールドの転置インデックスが作成され、検索可能になります。
stored true と指定すると、当該フィールドの値が保存され、flでの指定が可能になります。ハイライト対象フィールドはtrueにしなければなりません。
required true と指定すると、必須フィールドとみなされ、インデクシング時に当該フィールド値が設定されていないと、エラーになります。
multiValued true と指定すると、フィールド値を複数持たせることができます。ECデータの productInfo は multiValued="true" とするフィールドの例です。
omitNorms true と指定すると、当該フィールドのフィールド長による重要度を計算しなくなります。Norm の効果により、「body より title フィールドの方の重要度を上げたい」というようなことを意識しなくても「いい感じ」にスコア計算されます。(次ページ) (重要度指定付き検索の例)q=title:東京駅^10 body:東京駅
autoGeneratePhraseQueries true と指定すると、一続きの文字列が Analyzer によって複数単語に分割された場合に、フレーズクエリが生成されます。

P30 Norm の効果

Q. キーワード X を探しているときに、以下のどちらの文書を上位に表示して欲しいか?

title body
doc1 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ X ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ X ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○
doc2 ○ ○ ○ ○ X ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○


Normにより長いフィールド(単語数が多いフィールド)ほどスコアを低減させる。

https://ja.wikipedia.org/wiki/Okapi_BM25

P31 トークンのAttribute

  • Analyzerはトークンテキスト以外にAttributeを出力
    • 特にTokenizerが「ポジション(インクリメント)」と「オフセット」を付与。

入力テキスト こんにちは、世界。

JapaneseTokenizer (形態素解析器)

オフセット 0 1 2 3 4 5 6 7 8 9
トークンテキスト
ポジション 1 2 3 4

P32 単語検索とフレーズ検索

  • 「2つ以上の単語の連続」をフレーズと呼びます。
  • 単語境界が明瞭な英語などの場合、通常はクエリキーワードは単語として検索されます。フレーズ検索を行いたい場合は、ダブルクォーテーションでくくってフレーズ検索であることを明示します。
    • (2単語のOR検索)q=dog cat ⇒ q.op=OR(デフォルト)の場合
    • (2単語のAND検索)q=dog AND cat
    • (2単語のフレーズ検索)q="dog cat"
    • (フレーズ検索のslop指定)q="dog cat"~2 ⇒ dogとcatの間に2単語距離があってもヒット
  • 単語境界があいまいな日本語などの場合、フィールドの定義にてautoGeneratePhraseQueries=trueにしておくと、Analyzerで複数単語が生成された場合に、自動的にフレーズ検索となります。
    • 検索時にパラメーター debugQuery=on を指定すると、検索結果レスポンスに「クエリがどのように解析されたか」というデバッグ情報を見ることができます。

P33 [演習7] autoGeneratePhraseQueriesの動作確認

text_2gフィールド型はautoGeneratePhraseQueries=trueが設定されています。デバッグ(KandaSearch の検索ページで「デバッグ」にチェックを入れます)機能を使って、「こんにちは」を同フィールドで検索したときに、以下のそれぞれでどのように変化するか、確認してみましょう。

  1. a_2g:こんにちは ⇒ a_2g:"こん んに にち ちは"
  2. 「コンフィグ」メニューでtext_2g型のautoGeneratePhraseQueriesをfalseに設定し、「リロード」をして再度「a_2g:こんにちは」を検索します。 ⇒ a_2g:こん a_2g:んに a_2g:にち a_2g:ちは
  3. 「任意のパラメータ」にq.op=ANDを指定して再度「a_2g:こんにちは」を検索します。 ⇒ +a_2g:こん +a_2g:んに +a_2g:にち +a_2g:ちは

P34 オフセットとハイライト

  • ポジション情報は主にフレーズ検索等で使われます。
  • それに対してオフセット情報はハイライトで使われます。
  • 日本語ハイライトの要件

検索キーワード
・コンピューター
・コンピューター
・コンピュータ
・computer

[要件]これらのいずれのキーワードでもヒット&ハイライトさせたい

検索結果(ハイライトスニペット表示)

新しい コンピューター を買いました!

P35 日本語検索ハイライトの失敗例

  • そもそもヒットしない
  • 一部のキーワードではヒットするが、ヒットしないキーワードもある
    • 「コンピューター」、「コンピューター」、「computer」はヒット
    • 「コンピュータ」、「Computer」はヒットしない
  • ヒットはするが、ハイライトがずれる
    新しい コンピューターを 買いました!

P36 CharFilterとTokenizerのオフセット補正(補正前)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

MappingCharFilter ↓

0 1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

JapaneseTokenizer

P37 CharFilterとTokenizerのオフセット補正(補正後)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

MappingCharFilter ↓

0 1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

JapaneseTokenizer

P38 [演習8] オフセット補正の動作確認

Solr Admin UIのAnalysisでtext_jaフィールド型を使ってCharFilter〜Tokenizer間のオフセット補正の動作を確認します。入力文「ヴェランダ」(半角カナ)を解析してみましょう。

  1. 入力文「ヴェランダ」を解析します。 ⇒ 「ヴェランダ」(0,7)
  2. つぎに、KandaSearchの「コンフィグ」メニューでecを選んで、managed-schemaを編集してtext_jaフィールド型を次のようにします。「リロード」を忘れずに行います。
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-kana.txt"/>
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-kana2.txt"/>
    
  3. そして再度Solr Admin UIで入力文「ヴェランダ」を解析します。 ⇒ 「ベランダ」(0,7)
  4. mapping-kana.txtとmapping-kana2.txtの定義内容を確認しましょう。
0 1 2 3 4 5 6 7

P39 その他

uniqueKey

文書のIDとなるフィールドを<uniqueKey />で指定します。オプションの設定ですが、業務アプリケーションではほぼ必須と考えていいでしょう。ユニークキーの指定がないと、文書の更新やハイライトができません。SolrCloud にもユニークキーが必須です。

<uniqueKey>id</uniqueKey>

copyField

sourceで指定したフィールド値をdestで指定したフィールドにコピーします。
日本語では形態素解析器と文字N-gramの横断検索等で多用します。

<copyField source="name" dest="name_2g"/>

dynamicField

```<field />```で明示的に指定されていないフィールドは、インデクシング時や検索時に```<dynamicField />```が探索され、該当する```<dynamicField />```のフィールド設定が適用されます。
```xml
<dynamicField name="*_i"  type="pint"    indexed="true"  stored="true"/>
<dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/>

P40 Q&A, アンケート

P41 (Appendix)演習で使用するサンプルデータの使い方

P42 [演習7] 日本語検索用コレクションの作成 (再掲)第1回 Apache Solr 入門

Solr 付属のサンプルデータは日本語を含まないので日本語の動作がよくわかりません。これ以降は日本語データを登録して日本語を検索できるか試してみます。

  1. プロジェクトビューの「拡張機能・辞書」に行き、「ライブラリーからエクステンションを追加」をクリックします。一覧から「RONDHUIT EC configuration」を選択して「プロジェクトに追加」します。
  2. プロジェクトに追加したEC confを「詳細」からダウンロードします。
  3. インスタンスの「コレクション」に行き、「コレクションを追加する」をクリックします。ポップアップで「インポート」を選んでEC confをアップロードし、コレクションを作成します。(コレクション名はここではecとします)

P43 [演習8] ECデータの登録と検索(再掲)第1回 Apache Solr 入門

  1. プロジェクトビューの「拡張機能・辞書」に行き、「ライブラリーからエクステンションを追加」をクリックします。一覧から「RONDHUIT EC data」を選択して「プロジェクトに追加」します。
  2. プロジェクトに追加したEC dataを「詳細」からダウンロードします。
  3. インスタンスの「オーバービュー」に行き、「ドキュメントを登録する」からEC dataを登録します。
  4. インスタンスの「検索」で以下の検索を試します。
    • コレクションでec、ユニークキーでidと入力し検索。
    • タイトルにproductName、ボディにproductInfoと入力して検索。
    • 「のり」を検索。⇒ "no field name specified in query and no default specified via 'df' param"というエラーになるのでデフォルトフィールド(df)にproductNameやproductInfoを設定して、再度「のり」を検索します。
      • UIでハイライト設定をしていませんが、solrconfig.xmlにデフォルトでハイライト設定がしてあるので、ハイライトがある程度行われています。

お見積もり・詳細は KandaSearch チームに
お気軽にお問い合わせください。

お問い合わせ