SlideShare une entreprise Scribd logo
1  sur  18
類義語検索と類義語ハイライト 
2014/12 
shinichiro@apache.org 
1
About me 
• 株式会社ロンウイット 
• Apache Solr & Apache ManifoldCF トレーニング&コンサルティング 
&サポート 
• [改訂新版] Apache Solr入門第6章「データのクローリング」担当 
• Apache ManifoldCF committer & PMC member 
• 第6回と第8回のSolr勉強会で発表 
– http://www.slideshare.net/ShinichiroAbe/apache-manifoldcf 
– http://www.slideshare.net/ShinichiroAbe/solr-40-13545722 
2
アジェンダ 
• 日本語全文検索の検索設定・ハイライト設定例 
• 類義語の検索とハイライト 
– 類義語 
• 類義語,同義語,類語,同意語,シノニム,類似語 
• 記事:類義語検索と類義語ハイライト 
– http://www.rondhuit.com/synonym-searching-and-synonym-highlighting. 
html 
3
日本語全文検索の検索設定例 
• 1)検索漏れの対応 
– edismaxによる形態素解析フィールドとN-gramフィールドの横断検索 
q=単語&defType=edismax&qf=title_ja^4 content_ja^3 title_2g^2 content_2g 
• 例: 
– 形態素解析フィールドにインデクシング「製造部門長谷川」 
• 製造|部門|長谷川 
– 形態素解析だけだと、q=門長やq=谷川でヒットできなくなってしまう 
– なので、2-gramフィールドで漏れをカバーする 
• 製造|造部|部門|門長|長谷|谷川 
4
日本語全文検索の検索設定例 
• 2)検索ゴミの対応 
– qfパラメータでN-gramフィールドの重みを下げる 
– システム出力(ゴミ)を減らす 
• autoGeneratePhraseQueries(デフォルトfalse->true) 
• 例: 
– q=こんにちは(2-gramでパース) 
• AGFQ=false-> (こんんににちちは) --BooleanQuery 
– q.op=ORなら「こんばんは」、「にちようび」もヒットしてしまう 
• AGFQ=true -> PhraseQuery("こんんににちちは") 
– q=会社(1-gramでパース) 
• AGFQ=false-> (会社) 
– q.op=ORなら「会場」、「弊社」もヒットしてしまう 
– q.op=ANDなら「社会」もヒットしてしまう 
• AGFQ=true -> PhraseQuery("会社") 
– AGFQ=falseは自動でフレーズクエリにしない->ポジションは考慮しない 
5 
<fieldType name="text_2g" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
日本語全文検索のハイライト設定例 
• ハイライタ 
– storedフィールドをフラグメントに分割し、クエリにマッチしたフラグメントをス 
コアリング、高いものをハイライトスニペット候補にして、開始・終了オフセッ 
トを使って、マッチした単語に強調タグをつけて返す 
• ハイライト対象フィールド(hl.fl)は、検索漏れを考慮して、N-gram 
フィールドを指定 
– N-gramでstoredフィールドをアナライズしてハイライト 
• 3つのハイライタ 
– Standard Highlighter(デフォルト) 
– FastVector Highlighter(aka FVH) 
– Postings Highlighter 
6
日本語全文検索のハイライト設定例 
• デフォルトハイライタ 
– N-gramフィールドのハイライトがうまくいかない(LUCENE-1489) 
– 例: 
• 2-gramフィールドにインデクシング:「Aを指定し、Bを指定し、Cを指定する」 
– q=指定&hl=on&hl.fl=content_2g 
» Aを<em>指定し、Bを指定し、Cを指定</em>する 
• FVH 
– デフォルトより速い。ただしインデックスサイズが大きくなる。 
• インデクシング時に保存したtermVectorsを使ってハイライトするのでstored 
フィールドの再アナライズをしない分速い 
– N-gramフィールドのサポート&フレーズ単位にハイライティング 
– 例: 
– q=指定&hl=on&hl.fl=content_2g&hl.useFastVectorHighlighter=true 
» Aを<b>指定</b>し、Bを<b>指定</b>し、Cを<b>指定</b>する 
– q=こんにちは&hl=on&hl.fl=content_2g&hl.useFastVectorHighlighter=true 
» <b>こんにちは</b> こんばんは 
7
日本語全文検索のハイライト設定例 
• PostingsSolrHighlighter 
– FVHより速い。インデックスサイズも小さくできる 
• インデクシング時に保存したオフセットを使ってハイライト 
– ただしフレーズ単位のハイライティングの未サポート(LUCENE-4825) 
– 例: 
• q=こんにちは&hl=on&hl.fl=content_2g 
– <em>こん</em><em>に</em><em>ち</em><em>は</em> <em>こん</em>ばんは 
• q="apple juice"&hl=on&hl.fl=content_2g 
– <em>apple</em> <em>juice</em> <em>apple</em> 
• ハイライタの選択 
– 高速かつ(フレーズ単位の)正確なハイライトをするなら、FVH 
• インデックスサイズとインデクシング時間は犠牲にする 
8
検索とハイライトの設定まとめ、それから類義語対応 
• 検索とハイライトの前提条件 
– 形態素解析フィールドとN-gramフィールドの横断検索 
– autoGeneratePhraseQueries=true 
– &hl=on&hl.fl=content_2g&hl.useFastVectorHighlighter=true 
• 類義語対応-(2-gramの例) 
– フィールドタイプでSynonymFilterFactoryを追加する 
9 
<fieldType name="text_2g" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
<analyzer type="index"> 
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="2"/> 
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" 
ignoreCase="true" expand="true" 
tokenizerFactory="solr.NGramTokenizerFactory" 
tokenizerFactory.minGramSize="2" 
tokenizerFactory.maxGramSize="2” 
luceneMatchVersion="3.3"/> 
</analyzer> 
<analyzer type="query"> 
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="2"/> 
</analyzer> 
</fieldType>
SynonymFilterFactoryの設定 
• tokenizerFactory*属性 
– 上流トークナイザを指定してそのトークナイザでシノニム辞書内の類義語を読 
み込み、トークンをマッチさせる 
– 上流トークナイザが持つ属性を同じように設定する(SOLR-4813) 
• type="index"側で設定し、expand属性を=true 
– ■インデクシング側に設定し、シノニム辞書を等価形式にして展開する■ 
• シノニム辞書を変更したら再インデクシングする必要がある 
– クエリ側に設定すると、フレーズクエリのときMultiPhraseQueryが生成されて 
ヒットできなくなる(AGFQ=trueならフレーズクエリになりうるので) 
• 「[改訂新版] Apache Solr入門」第9章P.281-285 P.300-302を参照 
– クエリ側に設定したい場合、シノニム辞書が片方向形式だと、インデクシング側 
にも設定しないと、マッチしない 
– クエリ側に設定すると、類義語のIDFが効いて、レアな類義語が高いスコアを相 
対的に獲得してしまう(Television > TV) 
• https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory 
– コミュニティではクエリ側での利用の要望・パッチ提案がある(SOLR-4381, SOLR- 
5379など)が、取り込まれてはいない 
10
SynonymFilterFactoryの設定 
• synonyms="synonyms.txt" 
#片方向形式 
aaa => bbb 
aaa => ccc 
#これで、aaa=>bbb,cccになる 
#等価形式(双方向展開) 
内閣総理大臣,首相,安倍,野田 
• luceneMatchVersion 
– <= 3.3 SlowSynonymFilter 
• 従来のフィルタ 
– >= 3.4 FSTSynonymFilter(LUCENE-3233) 
• デフォルト。シノニム辞書ロードのメモリがコンパクトになり、処理が速 
い。ManagedSynonymFilterFactoryではこちらを採用 
• 従来と実装が変わったため、ポジションとオフセットの振り方が変わっ 
た。この影響で類義語検索でヒットできないケース・類義語ハイライトが 
ズレるケースがある11
FSTSynonymFilterの制限事項 
• マルチトークンな類義語はトークングラフ生成が複雑になり、フレーズクエリの検索 
がおかしくなる 
– http://s.apache.org/TokenGraphs 
– Automata Invasion P.23 
• http://www.slideshare.net/lucenerevolution/automaton-invasionlucenerevolution2012 
• その結果、 
– 類義語検索でヒットできなかったり意図しないヒットが起こる 
• ポジションの振り方が変わったためフレーズクエリの検索が失敗する/意図しないヒットを 
する場合がある 
– 類義語ハイライトがズレる 
• オフセットの振り方が変わったためハイライトがズレる 
– 従来のポジション&オフセットの振り方を維持できない 
• 回避方法->「シングルトークンで類義語を定義する」 
– 片方向形式+インデックス側とクエリ側にSynonymFilterFactoryを配置 
• 内閣総理大臣,首相=> 首相 
• エンジニア,技術者=> 技術(?) シングルトークン代表を探すのが無理 
• 徳川家康,竹千代=> 家康(?) シングルトークン代表を探すのが無理 
• dns, domain name service => dns 
• グラフ生成の別アプローチのパッチ提案がある(LUCENE-5012)が、取り込まれては 
いない 
12
[FST|Slow]SynonymFilterの問題点 
• 類義語検索でヒットできない例(FST|Slow両方): 
– シノニム辞書は「内閣総理大臣,首相」 
– 2-gramフィールドにインデクシング:「内閣総理大臣でございます」 
• q=首相で 
– ヒットしない。PQ("首相相で")で次ポジションに「相で」がない 
– 「臣で」は2-gramのとき生成される 
– 1-gramフィールドにインデクシング:「内閣総理大臣でございます」 
• q=首相で 
– ヒットしない。PQ("首相で")で次ポジションに「で」がない 
13 
トークン[ポジション] |首相[1] |臣で[6]|でご[7]|ござ|ざい| 
|内閣[1]|閣総[2]|総理[3]|理大[4]|大臣[5]| 
トークン[ポジション] |首[1]|相[2] |で[7]|ご[8]|ざ[8]|い[10] 
|内[1]|閣[2]|総[3]|理[4]|大[5]|臣[6]|
FSTSynonymFilterの問題点 
• 類義語検索でヒットしないのを期待するがヒットする例: 
– シノニム辞書は「dns, domain name service」 
– textフィールドにインデクシング:「dns is up」 
• q="dns name up" 
– フレーズクエリでヒットしてしまう 
– 従来のSlowSynの場合は上記フレーズクエリはヒットしない 
14 
トークン[ポジション] |dns[1] |is[2] |up[3] | 
|domain[1]|name[2]|service[3]| 
トークン[ポジション] |dns[1] |is[4] |up[5] | 
|domain[1]|name[2]|service[3]|
FSTSynonymFilterの問題点 
• 類義語ハイライトがズレる例: 
– シノニム辞書は「内閣総理大臣,首相」 
– 2-gramフィールドにインデクシング:「首相でございます」 
• q=内閣総理大臣&hl=on 
– <b>首相でござい</b>ます 
– ハイライトズレ。オフセット0-6でハイライトするため 
15 
トークン 
[開始オフセット, 
終了オフセット] 
|首相[0,2]|相で[1,3]|でご[2,4]|ござ[3,5]|ざい[4,6]|いま[5,7]|ます[6,8] 
|内閣[0,2]|閣総[1,3]|総理[2,4]|理大[3,5]|大臣[4,6]|
SlowSynonymFilter 
• 類義語ハイライトはズレない 
– 類義語が同一オフセットになるからズレない 
– q=首相&hl=on 
– q=内閣総理大臣&hl=on 
• ハイライトがズレないようにするには、FSTSynではなくSlowSynを使 
えばよい 
– SOLR-3390 
• luceneMatchVersion="3.3" 
16 
トークン 
[開始オフセット, 
終了オフセット] 
|首相[0,6] |臣で[5,7]|でご[6,8]| 
|内閣[0,6]|閣総[0,6]|総理[0,6]|理大[0,6]|大臣[0,6]|
branch_5x 
• LUCENE-5944branch_5x作成&@Deprecatedなクラスの削除など 
– https://svn.apache.org/viewvc?limit_changes=0&view=revision&revision=1626055 
• SlowSynonymFilterの削除、FSTSynonymFilter->SynonymFilter 
• (補足)CJKTokenizerの削除 
• (補足) schema.xmlにあるtext_cjk型でシノニムは使えない 
– 「[改訂新版] Apache Solr入門」P.284 参照 
– NGramTokenizerを使う 
17
NGramSynonymTokenizer 
• LUCENE-5252のパッチ 
– http://www.slideshare.net/KojiSekiguchi/lucene-5252n-gramsynonymtokenizer 
– シノニム辞書にある類義語のトークンはN-gram分割しない。類義語は同一ポジショ 
ン同一オフセットを保持する 
– 類義語の両脇の文字列を補正する 
• 類義語検索でヒットできる 
– シノニム辞書は「内閣総理大臣,首相」 
– 2-gramフィールドにインデクシング:「内閣総理大臣でございます」 
• q=首相で 
• 類義語ハイライトはズレない 
• q=首相で 
18 
トークン[ポジション] |首相[1]|で[2]|ござ[3]|ざい[4]|いま|ます 
|内閣総理大臣[1]|でご[2]| 
トークン 
[開始オフセット, 
終了オフセット] 
|首相[0,6]|で[6,7]|ござ[7,9]|ざい[8,10]|いま|ます 
|内閣総理大臣[0,6]|でご[6,6]|

Contenu connexe

Tendances

SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回Naoyuki Yamada
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...NTT DATA Technology & Innovation
 
Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析政雄 金森
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやyoku0825
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) Satoshi Nagayasu
 
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep DiveAmazon Web Services Japan
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallAtsushi Tanaka
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)NTT DATA Technology & Innovation
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話KEISUKE KONISHI
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話Daichi Koike
 
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJPYahoo!デベロッパーネットワーク
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Takayuki Shimizukawa
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)NTT DATA Technology & Innovation
 

Tendances (20)

SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Apache Solr 入門
Apache Solr 入門Apache Solr 入門
Apache Solr 入門
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
Apache Solr 検索エンジン入門
Apache Solr 検索エンジン入門Apache Solr 検索エンジン入門
Apache Solr 検索エンジン入門
 
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
 
Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
 
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
 
Hive on Tezのベストプラクティス
Hive on TezのベストプラクティスHive on Tezのベストプラクティス
Hive on Tezのベストプラクティス
 
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 

Similaire à 類義語検索と類義語ハイライト

AWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAmazon Web Services Japan
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門Mahito Ogura
 
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Tomohito Adachi
 
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Tetsu Yama
 
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)Tetsu Yama
 
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)Tetsu Yama
 
COD2012 T2/T3 : 実機で試す SQL Server の現状取得
COD2012 T2/T3 : 実機で試す SQL Server の現状取得COD2012 T2/T3 : 実機で試す SQL Server の現状取得
COD2012 T2/T3 : 実機で試す SQL Server の現状取得Masayuki Ozawa
 
20180725 Learning To Rank meetup
20180725 Learning To Rank meetup20180725 Learning To Rank meetup
20180725 Learning To Rank meetupYasufumi Mizoguchi
 
PHPでのSWF編集とその応用
PHPでのSWF編集とその応用PHPでのSWF編集とその応用
PHPでのSWF編集とその応用Yo Ya
 
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向SFDG ROOKIES
 
GoldenGateテクニカルセミナー4「テクニカルコンサルタントが語るOracle GoldenGate現場で使える極意」(2016/5/11)
GoldenGateテクニカルセミナー4「テクニカルコンサルタントが語るOracle GoldenGate現場で使える極意」(2016/5/11)GoldenGateテクニカルセミナー4「テクニカルコンサルタントが語るOracle GoldenGate現場で使える極意」(2016/5/11)
GoldenGateテクニカルセミナー4「テクニカルコンサルタントが語るOracle GoldenGate現場で使える極意」(2016/5/11)オラクルエンジニア通信
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?Shinichi Nishikawa
 
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118Nozomi Kurihara
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCESFDG ROOKIES
 

Similaire à 類義語検索と類義語ハイライト (20)

AWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearch
 
solr勉強会資料
solr勉強会資料solr勉強会資料
solr勉強会資料
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門
 
Jfdg2
Jfdg2Jfdg2
Jfdg2
 
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Webシステム脆弱性LT資料
Webシステム脆弱性LT資料
 
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
 
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)
 
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)
 
COD2012 T2/T3 : 実機で試す SQL Server の現状取得
COD2012 T2/T3 : 実機で試す SQL Server の現状取得COD2012 T2/T3 : 実機で試す SQL Server の現状取得
COD2012 T2/T3 : 実機で試す SQL Server の現状取得
 
20180725 Learning To Rank meetup
20180725 Learning To Rank meetup20180725 Learning To Rank meetup
20180725 Learning To Rank meetup
 
全文検索入門
全文検索入門全文検索入門
全文検索入門
 
Yahoo!検索のパフォーマンス向上策全て見せます
Yahoo!検索のパフォーマンス向上策全て見せますYahoo!検索のパフォーマンス向上策全て見せます
Yahoo!検索のパフォーマンス向上策全て見せます
 
PHPでのSWF編集とその応用
PHPでのSWF編集とその応用PHPでのSWF編集とその応用
PHPでのSWF編集とその応用
 
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
 
GoldenGateテクニカルセミナー4「テクニカルコンサルタントが語るOracle GoldenGate現場で使える極意」(2016/5/11)
GoldenGateテクニカルセミナー4「テクニカルコンサルタントが語るOracle GoldenGate現場で使える極意」(2016/5/11)GoldenGateテクニカルセミナー4「テクニカルコンサルタントが語るOracle GoldenGate現場で使える極意」(2016/5/11)
GoldenGateテクニカルセミナー4「テクニカルコンサルタントが語るOracle GoldenGate現場で使える極意」(2016/5/11)
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介
 
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE
 

Dernier

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Dernier (11)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

類義語検索と類義語ハイライト

  • 2. About me • 株式会社ロンウイット • Apache Solr & Apache ManifoldCF トレーニング&コンサルティング &サポート • [改訂新版] Apache Solr入門第6章「データのクローリング」担当 • Apache ManifoldCF committer & PMC member • 第6回と第8回のSolr勉強会で発表 – http://www.slideshare.net/ShinichiroAbe/apache-manifoldcf – http://www.slideshare.net/ShinichiroAbe/solr-40-13545722 2
  • 3. アジェンダ • 日本語全文検索の検索設定・ハイライト設定例 • 類義語の検索とハイライト – 類義語 • 類義語,同義語,類語,同意語,シノニム,類似語 • 記事:類義語検索と類義語ハイライト – http://www.rondhuit.com/synonym-searching-and-synonym-highlighting. html 3
  • 4. 日本語全文検索の検索設定例 • 1)検索漏れの対応 – edismaxによる形態素解析フィールドとN-gramフィールドの横断検索 q=単語&defType=edismax&qf=title_ja^4 content_ja^3 title_2g^2 content_2g • 例: – 形態素解析フィールドにインデクシング「製造部門長谷川」 • 製造|部門|長谷川 – 形態素解析だけだと、q=門長やq=谷川でヒットできなくなってしまう – なので、2-gramフィールドで漏れをカバーする • 製造|造部|部門|門長|長谷|谷川 4
  • 5. 日本語全文検索の検索設定例 • 2)検索ゴミの対応 – qfパラメータでN-gramフィールドの重みを下げる – システム出力(ゴミ)を減らす • autoGeneratePhraseQueries(デフォルトfalse->true) • 例: – q=こんにちは(2-gramでパース) • AGFQ=false-> (こんんににちちは) --BooleanQuery – q.op=ORなら「こんばんは」、「にちようび」もヒットしてしまう • AGFQ=true -> PhraseQuery("こんんににちちは") – q=会社(1-gramでパース) • AGFQ=false-> (会社) – q.op=ORなら「会場」、「弊社」もヒットしてしまう – q.op=ANDなら「社会」もヒットしてしまう • AGFQ=true -> PhraseQuery("会社") – AGFQ=falseは自動でフレーズクエリにしない->ポジションは考慮しない 5 <fieldType name="text_2g" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
  • 6. 日本語全文検索のハイライト設定例 • ハイライタ – storedフィールドをフラグメントに分割し、クエリにマッチしたフラグメントをス コアリング、高いものをハイライトスニペット候補にして、開始・終了オフセッ トを使って、マッチした単語に強調タグをつけて返す • ハイライト対象フィールド(hl.fl)は、検索漏れを考慮して、N-gram フィールドを指定 – N-gramでstoredフィールドをアナライズしてハイライト • 3つのハイライタ – Standard Highlighter(デフォルト) – FastVector Highlighter(aka FVH) – Postings Highlighter 6
  • 7. 日本語全文検索のハイライト設定例 • デフォルトハイライタ – N-gramフィールドのハイライトがうまくいかない(LUCENE-1489) – 例: • 2-gramフィールドにインデクシング:「Aを指定し、Bを指定し、Cを指定する」 – q=指定&hl=on&hl.fl=content_2g » Aを<em>指定し、Bを指定し、Cを指定</em>する • FVH – デフォルトより速い。ただしインデックスサイズが大きくなる。 • インデクシング時に保存したtermVectorsを使ってハイライトするのでstored フィールドの再アナライズをしない分速い – N-gramフィールドのサポート&フレーズ単位にハイライティング – 例: – q=指定&hl=on&hl.fl=content_2g&hl.useFastVectorHighlighter=true » Aを<b>指定</b>し、Bを<b>指定</b>し、Cを<b>指定</b>する – q=こんにちは&hl=on&hl.fl=content_2g&hl.useFastVectorHighlighter=true » <b>こんにちは</b> こんばんは 7
  • 8. 日本語全文検索のハイライト設定例 • PostingsSolrHighlighter – FVHより速い。インデックスサイズも小さくできる • インデクシング時に保存したオフセットを使ってハイライト – ただしフレーズ単位のハイライティングの未サポート(LUCENE-4825) – 例: • q=こんにちは&hl=on&hl.fl=content_2g – <em>こん</em><em>に</em><em>ち</em><em>は</em> <em>こん</em>ばんは • q="apple juice"&hl=on&hl.fl=content_2g – <em>apple</em> <em>juice</em> <em>apple</em> • ハイライタの選択 – 高速かつ(フレーズ単位の)正確なハイライトをするなら、FVH • インデックスサイズとインデクシング時間は犠牲にする 8
  • 9. 検索とハイライトの設定まとめ、それから類義語対応 • 検索とハイライトの前提条件 – 形態素解析フィールドとN-gramフィールドの横断検索 – autoGeneratePhraseQueries=true – &hl=on&hl.fl=content_2g&hl.useFastVectorHighlighter=true • 類義語対応-(2-gramの例) – フィールドタイプでSynonymFilterFactoryを追加する 9 <fieldType name="text_2g" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> <analyzer type="index"> <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="2"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.NGramTokenizerFactory" tokenizerFactory.minGramSize="2" tokenizerFactory.maxGramSize="2” luceneMatchVersion="3.3"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="2"/> </analyzer> </fieldType>
  • 10. SynonymFilterFactoryの設定 • tokenizerFactory*属性 – 上流トークナイザを指定してそのトークナイザでシノニム辞書内の類義語を読 み込み、トークンをマッチさせる – 上流トークナイザが持つ属性を同じように設定する(SOLR-4813) • type="index"側で設定し、expand属性を=true – ■インデクシング側に設定し、シノニム辞書を等価形式にして展開する■ • シノニム辞書を変更したら再インデクシングする必要がある – クエリ側に設定すると、フレーズクエリのときMultiPhraseQueryが生成されて ヒットできなくなる(AGFQ=trueならフレーズクエリになりうるので) • 「[改訂新版] Apache Solr入門」第9章P.281-285 P.300-302を参照 – クエリ側に設定したい場合、シノニム辞書が片方向形式だと、インデクシング側 にも設定しないと、マッチしない – クエリ側に設定すると、類義語のIDFが効いて、レアな類義語が高いスコアを相 対的に獲得してしまう(Television > TV) • https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory – コミュニティではクエリ側での利用の要望・パッチ提案がある(SOLR-4381, SOLR- 5379など)が、取り込まれてはいない 10
  • 11. SynonymFilterFactoryの設定 • synonyms="synonyms.txt" #片方向形式 aaa => bbb aaa => ccc #これで、aaa=>bbb,cccになる #等価形式(双方向展開) 内閣総理大臣,首相,安倍,野田 • luceneMatchVersion – <= 3.3 SlowSynonymFilter • 従来のフィルタ – >= 3.4 FSTSynonymFilter(LUCENE-3233) • デフォルト。シノニム辞書ロードのメモリがコンパクトになり、処理が速 い。ManagedSynonymFilterFactoryではこちらを採用 • 従来と実装が変わったため、ポジションとオフセットの振り方が変わっ た。この影響で類義語検索でヒットできないケース・類義語ハイライトが ズレるケースがある11
  • 12. FSTSynonymFilterの制限事項 • マルチトークンな類義語はトークングラフ生成が複雑になり、フレーズクエリの検索 がおかしくなる – http://s.apache.org/TokenGraphs – Automata Invasion P.23 • http://www.slideshare.net/lucenerevolution/automaton-invasionlucenerevolution2012 • その結果、 – 類義語検索でヒットできなかったり意図しないヒットが起こる • ポジションの振り方が変わったためフレーズクエリの検索が失敗する/意図しないヒットを する場合がある – 類義語ハイライトがズレる • オフセットの振り方が変わったためハイライトがズレる – 従来のポジション&オフセットの振り方を維持できない • 回避方法->「シングルトークンで類義語を定義する」 – 片方向形式+インデックス側とクエリ側にSynonymFilterFactoryを配置 • 内閣総理大臣,首相=> 首相 • エンジニア,技術者=> 技術(?) シングルトークン代表を探すのが無理 • 徳川家康,竹千代=> 家康(?) シングルトークン代表を探すのが無理 • dns, domain name service => dns • グラフ生成の別アプローチのパッチ提案がある(LUCENE-5012)が、取り込まれては いない 12
  • 13. [FST|Slow]SynonymFilterの問題点 • 類義語検索でヒットできない例(FST|Slow両方): – シノニム辞書は「内閣総理大臣,首相」 – 2-gramフィールドにインデクシング:「内閣総理大臣でございます」 • q=首相で – ヒットしない。PQ("首相相で")で次ポジションに「相で」がない – 「臣で」は2-gramのとき生成される – 1-gramフィールドにインデクシング:「内閣総理大臣でございます」 • q=首相で – ヒットしない。PQ("首相で")で次ポジションに「で」がない 13 トークン[ポジション] |首相[1] |臣で[6]|でご[7]|ござ|ざい| |内閣[1]|閣総[2]|総理[3]|理大[4]|大臣[5]| トークン[ポジション] |首[1]|相[2] |で[7]|ご[8]|ざ[8]|い[10] |内[1]|閣[2]|総[3]|理[4]|大[5]|臣[6]|
  • 14. FSTSynonymFilterの問題点 • 類義語検索でヒットしないのを期待するがヒットする例: – シノニム辞書は「dns, domain name service」 – textフィールドにインデクシング:「dns is up」 • q="dns name up" – フレーズクエリでヒットしてしまう – 従来のSlowSynの場合は上記フレーズクエリはヒットしない 14 トークン[ポジション] |dns[1] |is[2] |up[3] | |domain[1]|name[2]|service[3]| トークン[ポジション] |dns[1] |is[4] |up[5] | |domain[1]|name[2]|service[3]|
  • 15. FSTSynonymFilterの問題点 • 類義語ハイライトがズレる例: – シノニム辞書は「内閣総理大臣,首相」 – 2-gramフィールドにインデクシング:「首相でございます」 • q=内閣総理大臣&hl=on – <b>首相でござい</b>ます – ハイライトズレ。オフセット0-6でハイライトするため 15 トークン [開始オフセット, 終了オフセット] |首相[0,2]|相で[1,3]|でご[2,4]|ござ[3,5]|ざい[4,6]|いま[5,7]|ます[6,8] |内閣[0,2]|閣総[1,3]|総理[2,4]|理大[3,5]|大臣[4,6]|
  • 16. SlowSynonymFilter • 類義語ハイライトはズレない – 類義語が同一オフセットになるからズレない – q=首相&hl=on – q=内閣総理大臣&hl=on • ハイライトがズレないようにするには、FSTSynではなくSlowSynを使 えばよい – SOLR-3390 • luceneMatchVersion="3.3" 16 トークン [開始オフセット, 終了オフセット] |首相[0,6] |臣で[5,7]|でご[6,8]| |内閣[0,6]|閣総[0,6]|総理[0,6]|理大[0,6]|大臣[0,6]|
  • 17. branch_5x • LUCENE-5944branch_5x作成&@Deprecatedなクラスの削除など – https://svn.apache.org/viewvc?limit_changes=0&view=revision&revision=1626055 • SlowSynonymFilterの削除、FSTSynonymFilter->SynonymFilter • (補足)CJKTokenizerの削除 • (補足) schema.xmlにあるtext_cjk型でシノニムは使えない – 「[改訂新版] Apache Solr入門」P.284 参照 – NGramTokenizerを使う 17
  • 18. NGramSynonymTokenizer • LUCENE-5252のパッチ – http://www.slideshare.net/KojiSekiguchi/lucene-5252n-gramsynonymtokenizer – シノニム辞書にある類義語のトークンはN-gram分割しない。類義語は同一ポジショ ン同一オフセットを保持する – 類義語の両脇の文字列を補正する • 類義語検索でヒットできる – シノニム辞書は「内閣総理大臣,首相」 – 2-gramフィールドにインデクシング:「内閣総理大臣でございます」 • q=首相で • 類義語ハイライトはズレない • q=首相で 18 トークン[ポジション] |首相[1]|で[2]|ござ[3]|ざい[4]|いま|ます |内閣総理大臣[1]|でご[2]| トークン [開始オフセット, 終了オフセット] |首相[0,6]|で[6,7]|ござ[7,9]|ざい[8,10]|いま|ます |内閣総理大臣[0,6]|でご[6,6]|