2017.12.15 Friday
スポンサーサイト
一定期間更新がないため広告を表示しています
| スポンサードリンク | - | | - | - |
関口宏司のLuceneブログOSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
2009.02.28 Saturday
ReverseStringFilter(2.9)
Lucene 2.9のcontrib/analyzersに、これまでありそうでなかったReverseStringFilterというTokenFilterが導入された。これは名前の通り、トークンの文字列を逆転させたトークンを出力するTokenFilterである。
たとえば"ABCD"というトークンは"DCBA"と変換されて出力される。 https://issues.apache.org/jira/browse/LUCENE-1398 これはどのような時に使えばいいかというと、単語の「後方一致検索」をしたいときに使うとよい。 たとえば、"ing"で終わる単語を検索したいとする。WildcardQueryを使って"*ing"を検索することはできるが、このような検索は転置索引の当該フィールドの単語をすべてチェックすることになってしまい検索に時間がかかってしまう。 そこで単語の「後方一致検索」をしたいフィールドに関してはReverseStringFilterを使って"looking"という単語なら"gnikool"というように登録する。そうしておいてWildcardQueryで"gni*"と検索すると転置索引のうち、"gni"で始まる範囲だけを見ればよいので格段に検索速度があがる。 以下に使用例を示す:
そして、実行結果は次の通りである:
2009.02.17 Tuesday
メールの署名欄を取り除く方法(MLネタ)
LuceneのMLで「メールをインデックスに登録して検索できるようにしたいが、署名欄が会社名などでひっかからないように署名欄を取り除きたい。いい方法はないでしょうか」というような質問があった。LuceneのAPIではどうしようもない問題だが、それに対しおもしろい回答があったので紹介する。
1.メールの文面をパラグラフで分割する 2.パラグラフのハッシュを計算する 3.同じ送信者の他のハッシュと比較し、同じモノは署名とみてよい 実際には返信文面にメーラーにより自動的に挿入される">"などを取り除かないといけなかったりして簡単ではないと思われるが、日常使っているプログラミング手法で解決できそうなところがおもしろい。 2009.02.02 Monday
contrib/xml-query-parserで複雑な検索式を解析する
Luceneの標準QueryParserはAND/OR/NOTなどの演算子や"(",")"などを使ったグルーピング、"^"を使った重み指定、"~"のスロップ指定など、これらの組み合わせからなる複雑な検索式を解析できる。QueryParserが解析できる検索式はこちらで見ることができる。
QueryParserはほとんどの基本的な検索要件(検索式)を解析してQueryオブジェクトを生成できる。しかし万能ではない。たとえば、LuceneのQueryの一種であるSpanQueryなどは種類がいろいろあったりするので(SpanTermQuery、SpanFirstQuery、SpanOrQuery、SpanNotQuery、SpanNearQuery、SpanRegexQuery)複雑すぎて検索式をルール化するのが難しい。また、Queryクラスは今後いくらでも増える可能性がある。そのたびにQueryParserに新しいルールを持ち込むのも大変で検索式が複雑になるのもあまりよくない。 そのような背景から考えられたのがcontrib/xml-query-parserで、「検索式をXMLで表現しよう」というものである。 たとえば、次のような文書があるとする:
この中から「単語Bと単語Cがこの順番で出現し、単語間の距離が2以内のもの」をSpanNearQueryを使って検索するとする。SpanNearQueryをプログラムで組み立てる場合は、次のようになる:
同じSpanNearQueryをcontrib/xml-query-parserで取得するには、まず、次のようなXML(検索式)を用意する:
そしてcontrib/xml-query-parserで上記XMLを解析してQueryオブジェクトを取得するには次のように行う:
プログラムの全体は次のようになる:
プログラムの実行結果は次の通りとなり、SpanQueryをプログラムで組み立てた場合とcontrib/xml-query-parserを使った場合で結果は同じとなる:
contrib/xml-query-parserはSpanQuery以外にももっといろいろなLuceneのQueryをサポートしている。もちろん、QueryParserがサポートしているような基本的な検索式もXMLで表現できるようになっている(そうでないと基本検索式はQueryParserで解析、それ以外の複雑な検索式はcontrib/xml-query-parserで解析・・・となってしまい、使い勝手が低下してしまう)。 |
+ Solrによるブログ内検索
+ PROFILE
+ LINKS
+ Lucene&Solrデモ
+ ThinkIT記事
+ RECOMMEND
+ RECOMMEND
Lucene in Action (JUGEMレビュー »)
Erik Hatcher,Otis Gospodnetic,Mike McCandless FastVectorHighlighterについて解説記事を寄稿しました。
+ RECOMMEND
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ MOBILE
+ SPONSORED LINKS
|
(C) 2024 ブログ JUGEM Some Rights Reserved.
|
PAGE TOP |