SolrにおけるIK分詞器の設定と商品検索スキーマの構築

1. IK分詞器の導入と設定

1.1 IK分詞器の準備

まず、IK Analyzerのバイナリファイル(例: IKAnalyzer2012FF_u1.jar)を取得し、以下のパスに配置します:

  • JARファイル → $TOMCAT_HOME/webapps/solr/WEB-INF/lib/
  • 辞書・設定ファイル(IKAnalyzer.cfg.xml および拡張辞書など)→ $TOMCAT_HOME/webapps/solr/WEB-INF/classes/

1.2 schema.xmlへのフィールドタイプ定義

schema.xml に以下のフィールドタイプを追加して、IK分詞器を使用可能にします:

<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

また、このタイプを使用するフィールドも定義します(例):

<field name="content_ik" type="text_ik" indexed="false" stored="true" multiValued="true"/>

1.3 設定の検証

Tomcatを再起動後、Solr Admin UIの「Analysis」ページで任意のCoreを選択し、text_ik タイプを使って中国語テキストの分詞結果を確認します。

2. 商品検索用スキーマの構成

2.1 商品テーブルの準備

以下のような商品テーブルをMySQLに作成します:

CREATE DATABASE IF NOT EXISTS solr;
USE solr;

CREATE TABLE products (
  pid INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255),
  catalog INT,
  catalog_name VARCHAR(50),
  price DOUBLE,
  number INT,
  description LONGTEXT,
  picture VARCHAR(255),
  release_time DATETIME
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.2 Solrフィールド設計

商品データに対応するSolrフィールドを以下のように定義します:

<!-- 主キー(Solrのidフィールドを再利用) -->
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>

<!-- 商品名(IK分詞 + 高亮表示対応) -->
<field name="product_name" type="text_ik" indexed="true" stored="true"/>

<!-- 分類ID(数値) -->
<field name="product_catalog" type="int" indexed="true" stored="true"/>

<!-- 分類名(完全一致検索) -->
<field name="product_catalog_name" type="string" indexed="true" stored="true"/>

<!-- 価格 -->
<field name="product_price" type="double" indexed="true" stored="true"/>

<!-- 商品説明(インデックスのみ) -->
<field name="product_description" type="text_ik" indexed="true" stored="false"/>

<!-- 画像パス(表示用) -->
<field name="product_picture" type="string" indexed="false" stored="true"/>

<!-- 統合検索用コピー先フィールド -->
<field name="product_keywords" type="text_ik" indexed="true" stored="true" multiValued="true"/>
<copyField source="product_name" dest="product_keywords"/>
<copyField source="product_catalog_name" dest="product_keywords"/>
<copyField source="product_description" dest="product_keywords"/>

2.3 schema.xmlの更新と適用

上記フィールド定義を schema.xml に追記し、Solr Coreが使用しているスキーマに反映させます。主キーとして id フィールドが存在することを確認してください。これが欠如すると、インデックスは作成されても検索結果が返らないことがあります。

2.4 設定確認

Tomcatを再起動後、Solr Admin UIの「Schema」または「Analysis」ページで各フィールドの型とコピー関係が正しく設定されているかを確認します。

タグ: Solr IK Analyzer lucene 全文検索 スキーマ設計

7月8日 17:06 投稿