Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


mroonga:10.7:tutorial

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
mroonga:10.7:tutorial [2020/11/10 16:41]
y2sunlight [スニペット]
mroonga:10.7:tutorial [2020/11/10 17:56] (現在)
y2sunlight [クエリ展開]
行 385: 行 385:
 ==== スニペット ==== ==== スニペット ====
  
-スニペット(snippet)とは「切れ端」という意味で、検索結果として表示されるページへの短い説明文のことを指します。次のユーザ定義関数を SELECT リスト内で使って、検索語周辺のテキストを検索語をハイライトした状態でHTML出力できます。+スニペット(snippet)とは「切れ端」という意味で、検索結果として表示されるページへの短い説明文のことを指します。次のユーザ定義関数を SELECT リスト内で使って、検索語周辺のテキストを検索語をハイライトした状態でHTML出力できます。
  
 <code sql> <code sql>
行 411: 行 411:
 </code> </code>
  
-検索結果内の指定されたキーワードを強調表示して、キーワード周辺のテキストを表示します。全体をで囲み ''<nowiki><div class = "snippet"></nowiki>'' と ''<nowiki></div></nowiki>'' で、各キーワードを ''<nowiki><span class = "keyword"></nowiki>'' ... ''<nowiki></span></nowiki>'' で囲み、HTMLの特殊文字はエスケープされるので、結果をそのままHTMLで出力できます。+検索結果内の指定されたキーワードを強調表示して、キーワード周辺のテキストを表示します。全体を ''<nowiki><div class = "snippet"></nowiki>'' と ''<nowiki></div></nowiki>'' で、各キーワードを ''<nowiki><span class = "keyword"></nowiki>'' と ''<nowiki></span></nowiki>'' で囲み、HTMLの特殊文字はエスケープされるので、結果をそのままHTMLで出力できます。
  
 より詳細な設定をしたい場合は、次の ''mroonga_snippet'' 関数を使用します。 より詳細な設定をしたい場合は、次の ''mroonga_snippet'' 関数を使用します。
行 420: 行 420:
 SELECT SELECT
   mroonga_snippet(   mroonga_snippet(
-    content              --  カラム名やイミディエイトを指定します。 +    content              -- カラム名やイミディエイト 
-    , 100, 3             --   +    , 100                -- スニペットの最大長(バイト単位) 
-    , 'utf8_unicode_ci'  --  +    , 3                  -- スニペットの最大要素数 
-    , 1, 1               -- +    , 'utf8_unicode_ci'  -- エンコーティング(照合順序) 
-    , '...', '...'       -- +    , 1                  -- 先頭の空白を無視する(1)か否(0)か 
-    , '明日', '<span class="keyword">', '</span>' +    , 1                  -- HTMLエスケープを行うか(1)か否(0)か 
-    , '天気', '<span class="keyword">', '</span>' +    , '...'              -- スニペットの開始テキスト 
-    , '東京', '<span class="keyword">', '</span>'+    , '...'              -- スニペットの終了テキスト 
 +    , '明日', '<span class="keyword">', '</span>'  -- キワード,キワードの開始テキスト,ワードの終了テキスト 
 +    , '天気', '<span class="keyword">', '</span>'  -- 同上 
 +    , '東京', '<span class="keyword">', '</span>'  -- 同上
   ) as snippet   ) as snippet
   FROM diaries   FROM diaries
行 436: 行 439:
  
 <code sql> <code sql>
-..<span class="keyword">明日</span>の<span class="keyword">東京</span>都の<span class="keyword">天気</span>は晴れでしょう。...+...<span class="keyword">明日</span>の<span class="keyword">東京</span>都の<span class="keyword">天気</span>は晴れでしょう。...
 ...<span class="keyword">明日</span>の京都の<span class="keyword">天気</span>は雨でしょう。... ...<span class="keyword">明日</span>の京都の<span class="keyword">天気</span>は雨でしょう。...
 ...今日の<span class="keyword">天気</span>は晴れでしょう。... ...今日の<span class="keyword">天気</span>は晴れでしょう。...
行 446: 行 449:
 \\ \\
  
-==== クエリ展開 (同義語/関連語展開) ====+==== クエリ展開 ====
  
-https://mroonga.org/ja/blog/2017/10/12/mroonga-7.07.html+Mroongaのクエリ展開機能は、同義語や関連語を展開して検索する場合に利用できます。 
  
-の使い勝手った+まずは、以下ような関連語テーブルを準備します。以下の例では、検索対象周辺の都道府県を持つ関連語テーブルを例として使用しますが、同義語テーブルなど一般的もしれません。
  
 <code sql> <code sql>
 +CREATE TABLE area (
 +  name varchar(255),
 +  pref varchar(255),
 +  INDEX (name)
 +) ENGINE = Mroonga COLLATE utf8_unicode_ci;
 +INSERT INTO area VALUES ('東京', '東京 神奈川 埼玉');
 +INSERT INTO area VALUES ('神奈川', '神奈川 東京 静岡');
 +INSERT INTO area VALUES ('大阪', '大阪 京都 兵庫');
 +INSERT INTO area VALUES ('京都', '京都 大阪 滋賀');
 </code> </code>
 +
 +このようなテーブルを準備することによって、「東京」、「神奈川」、「埼玉」の何れが検索語として指定されても「東京」がヒットするようになります。尚、この例のように、''pref'' には自分自身の都道府県の名前も含める必要があります。
 +
 +=== mroonga_query_expand関数 ===
 +
 +次のユーザ定義関数を ''MATCH AGAINST'' 関数内で使って、クエリ展開機能(この例では関連語展開検索)が利用できます。
 +
 +<code>
 +mroonga_query_expand(table, term, synonyms, query);
 +</code>
 +
 +  * ''table'' には 同義語や関連語を定義するテーブル名を指定します。
 +  * ''term'' には 検索対象語句を保持する ''table'' 内のカラム名を指定します。
 +  * ''synonyms'' には 同義語や関連語を保持する ''table'' 内のカラム名を指定します。
 +  * ''query'' には 通常の ''MATCH AGAINST'' 関数で使用する検索条件を指定します。
 +
 +
 +
 +<code sql>
 +SELECT * FROM diaries
 +  WHERE MATCH(content) AGAINST(mroonga_query_expand("area", "name", "pref", "+明日 +天気 +東京") IN BOOLEAN MODE)
 +-- または
 +SELECT * FROM diaries
 +  WHERE MATCH(content) AGAINST(mroonga_query_expand("area", "name", "pref", "+明日 +天気 +神奈川") IN BOOLEAN MODE)
 +</code>
 +
 +上の2つは以下の同じ検索結果を表示します。
 +
 +<code sql>
 +明日の東京都の天気は晴れでしょう。
 +</code>
 +
 +詳しくは、Mroongaの[[https://mroonga.org/ja/blog/2017/10/12/mroonga-7.07.html|ドキュメント]]を参照して下さい。
  
 \\ \\
  
mroonga/10.7/tutorial.1604994086.txt.gz · 最終更新: 2020/11/10 16:41 by y2sunlight