---
title: 情報検索 入門編
tags:  #lifull #情報検索 #全文検索エンジン #solr  
author: [株式会社LIFULL](https://www.docswell.com/user/LIFULL)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/Z5JG2161JL.jpg?width=480
description: 情報検索に関する初歩的な内容についてまとめました。
published: June 02, 22
canonical: https://www.docswell.com/s/LIFULL/KQ4NM5-2022-06-02-160742
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/Z5JG2161JL.jpg)

情報検索 入門編
株式会社 LIFULL
社内勉強会用資料
検索エンジンチーム 寺井 輝


# Page. 2

![Page Image](https://bcdn.docswell.com/page/V47QPD4NEP.jpg)

今日の内容
概要
検索方法の話
-
順次検索方式 (grep方式)
-
転置インデックス方式
検索結果のランキング
単語分割の話
-
形態素解析、N-gram
-
検索漏れや検索誤りの話
-
アナライザ
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/DKE4YZQ371.jpg)

概要
検索エンジンとは？
全文検索エンジン: 検索対象の文書テキストを、全フィールドにわたり横断的に検索
例) Yahoo!やGoogle、図書館の図書検索や通販サイトの商品検索など
LIFULL HOME’Sでは物件検索にオープンソース全文検索エンジンSolrを使用！
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/PL716RPZEG.jpg)

q=コロナ
全文検索の方式
順次検索方式 (grep方式)
文書の先頭から順次比較 →grepコマンドと同じ
全部見るので時間かかる
新型コロナウイルスの影響により、首都圏で
は緊急事態宣言が発令され、在宅ワークを強
いられています。
コロナビールうまいよね。浴びるほどビール飲
みたいね。今日は金曜日だしさっさと終わる
か〜〜〜〜。
q=コロナ
インデックス
転置インデックス方式
コロナ 緊急事態宣言 ビール 金曜日
あらかじめ検索対象の文書からインデックスを作っておく
新型コロナウイルスの影響により、首都圏で
は緊急事態宣言 が発令され、在宅ワークを強
いられています。
→文書にラベルをつける感じ、そこから逆引きできる
必要箇所だけ探すため 速い、大量のドキュメント検索向き
全文検索エンジンで主に使用される
コロナビールうまいよね。浴びるほど ビール飲
みたいね。今日は 金曜日だしさっさと終わる
か〜〜〜〜。
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/8G7WW12672.jpg)

転置インデックスの作り方
文書ID
検索対象文書
1
カツオはサザエの弟
2
サザエはワカメの姉
3
ワカメはカツオの妹
いい感じに分割
カツオ: 1 , は: 1 , サザエ: 1 , の:1 , 弟: 1
サザエ: 2 , は: 2 , ワカメ: 2 , の:2 , 姉: 2
ワカメ: 3 , は: 3 , カツオ: 3 , の:3 , 妹: 3
↓ 転置インデックス
の
1,2,3
ワカメ
2,3
は
1,2,3
姉
2
カツオ
1,3
弟
1
サザエ
1,2
妹
3
q=カツオ
↓
文書1,3が返ってくる
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/W4JZ5PDR73.jpg)

↓ 転置インデックス
転置インデックスの検索例
q=ワカメ AND 姉 → 文書2を返す
q=ワカメ OR 妹 → 文書3,2の順で返す
内部で出てくる順番がランキング付けされている
ため
の
1,2,3
ワカメ
2,3
は
1,2,3
姉
2
カツオ
1,3
弟
1
サザエ
1,2
妹
3
の
1,2,3
ワカメ
2,3
は
1,2,3
姉
2
カツオ
1,3
弟
1
サザエ
1,2
妹
3
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/KYE69M11EV.jpg)

単語の重み
検索するといい感じの順番で出てくるのは内部でスコア付けされているため
そのために使われる概念が 単語の重みで、以下の概念を利用した計算を用いることが多い
a.
ドキュメント内での単語の出現頻度
Pythonが5回、Javaが1回出てくるドキュメントだったらPythonはドキュメントを特徴づける単語である可能性が高い
→ 多く出現する単語に大きな重みを与える
b.
検索対象の全ドキュメントの中で単語が出現するドキュメント数
検索対象の全ドキュメント内でどれくらい出現するかの情報も重要
→ あまりにも頻繁に出てくる単語は特徴とは言えない可能性があるため
プログラミングに関するドキュメントの中で「プログラミング」という単語はいっぱい出てきて重要性低い、
「オブジェクト指向」とかの方が特徴付ける力が強そう
a × 1/b = 単語の重み
検索エンジンではこの重みをもとに、どれくらいマッチするかを計算
できる(カスタマイズも可能 )
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/5GE5NZ4L74.jpg)

日本語の単語分割方法の話
日本語は単語の分割がむずい: 単語の間が曖昧のため
形態素解析
辞書に基づいて単語分割
検索誤りが少ないが検索漏れが多い
緊急事態宣言→ 緊急 / 事態 / 宣言
文字N-gram
機械的にN文字単位で分割
緊急事態宣言(N=2) → 緊急 / 急事 / 事態 / 態宣 / 宣言
検索漏れが少ないが検索誤りが多い
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/V9725RV37R.jpg)

検索漏れ あいまいな解釈ができる文章
例文：ここではきものを脱ぐ
形態素解析
ここ/では/きもの/を/脱ぐ
ここで/はきもの/を/脱ぐ
下の解析方法で 「q=きもの」 のクエリが来ると検索にヒットしな
い状態になっている
N-gram(N=2)
ここ/こで/.../はき/きも/もの/...
q=きもの(きも/もの)でもq=はきもの(はき/きも/もの)でも検索が
可能
N-gramがつよそう？
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/5DJYKD38EM.jpg)

検索誤り
例文：東京都の天気
N-gram(N=2)
東京/京都/都の/の天/天気
q=京都 でも引っかかってしまう！
あとq=東 とか1文字検索も引っかからない状態
N-gramは万全じゃない！（あとインデックスのサイズが爆発したりもする）
ちなみに...
LIFULL HOME’SのSolrでは形態素解析のトークナイザを使用
Luceneのトークナイザが優秀らしいのでそれなりの精度を確保
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/2V7NR6V9J8.jpg)

まとめ
検索エンジンでは以下の機能が実現可能
- 転置インデックスを利用した高速全文検索が行われている
→内部でいい感じの単語分割機能が動いてインデックスを作成
- 単語の重みをもとにしたスコア計算でいい感じの順番で表示
日本語の検索は実は難しい
全文検索エンジンSolrを利用してLIFULL HOME’Sの物件検索は実装されている
11


