SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
Lucene Query 再考
- Domain Specific Query 実装 -
07/01/2015
概要
• 自己紹介
• Supership株式会社について
• QueryParser 実装してみた
• Lucene おさらい
• Lucene クエリ と 近接検索
• Domain Specific Query
• 今後の予定
2
概要
• 自己紹介
• Supership株式会社について
• QueryParser 実装してみた
• Lucene おさらい
• Lucene クエリ と 近接検索
• Domain Specific Query
• 今後の予定
3
自己紹介
• 大川 真吾
GitHub @shingoOKAWA
Twitter @okawa_shingo
• Supership株式会社 インフラ事業開発本部検索グループ エンジニア
2015年11月入社
• バックエンドエンジニア (Elasticsearch歴 3ヶ月目 池田さん感謝)
検索エンジン関連バックエンド設計/実装全般
• 静岡出身、加速器工学専攻 (物理シミュレーションとか)
• プログラミング好き
4
概要
• 自己紹介
• Supership株式会社について
• QueryParser 実装してみた
• Lucene おさらい
• Lucene クエリ と 近接検索
• Domain Specific Query
• 今後の予定
5
Supership株式会社について
7
3社合併 2社グループ会社化
• 2015年11月に3社合併
インターネットサービス事業
広告事業
プラットフォーム事業
概要
• 自己紹介
• Supership株式会社について
• QueryParser 実装してみた
• Lucene おさらい
• Lucene クエリ と 近接検索
• Domain Specific Query
• 今後の予定
8
Query Parser 実装してみた
• こんな Query Parser 実装してみた
⑴クエリテキストレベルで近接検索(Proximity Search) や 分離検索(DisMax) 対応
⑵文法の違いをクエリテキストレベルで隠蔽
⑶簡素な BNF で DSQ(Domain Specific Query) を簡単に実装可能
⑷構文木 (Concrete/Abstract Syntax Tree) 周りの API 対応
9
検索プラットフォームの実現
Query Parser 実装してみた
• 何が嬉しいの?
⑴距離などを考慮したより詳細な検索実現
⑵検索プラットフォーム実現によりプロダクト・サービスの多様化、統合対応
⑶小さなコストで種々の検索UX改善サイクルを回せる
⑷トークンの揺らぎ(同義語など)等を、プログラマブルに構文木レベルで対応
10
Query Parser 実装してみた
1. 近接検索
PhraseQuery や SpanQuery (後述)
Term 間の距離を検索条件として付加できる
11
PhraseQuery: “cat dog bird”, slop: 3 SpanQuery: “cat dog” bird, slop: 3
cat birdhorse lizard dog
2 0
cat birdhorse lizarddog
20
Query Parser 実装してみた
2. 文法の隠蔽 (Hetero Grammar)
12
Query Parser 実装してみた
3. 直感的で分かりやすい ANTLR BNF
既存実装 QueryParser.jj と比較して直感的で分かりやすい
13
Query Query(String field) :
{
Query q, firstQuery=null;
int conj, mods;
}
{
mods=Modifiers() q=Clause(field)
{
addClause(clauses, CONJ_NONE, mods, q);
if (mods == MOD_NONE) firstQuery=q;
}
:
:
grammar ExternalQuery;
import CommonLexerRules;
query : (expression)+
;
expression : CONJUNCTION_AND clause
| CONJUNCTION_OR clause
| clause
;
:
:
:
Query Parser 実装してみた
4. 構文木 API
Concrete Syntax Tree や Abstract Syntax Tree を用いて解析フェーズを多段階に
品詞による Term 結合や Synonym 等の揺らぎをよりフレキシブルに対応可能
14Concrete Syntax Tree
OR
FF ドラクエ
Abstract Syntax Tree
BooleanClause
AT SAME POSITION
FF Final Fantasy ファイファン
TAG: BOOLEAN
TAG: TERM TAG: TERM
概要
• 自己紹介
• Supership株式会社について
• QueryParser 実装してみた
• Lucene おさらい
• Lucene クエリ と 近接検索
• Domain Specific Query
• 今後の予定
15
Lucene おさらい
• Apache Lucene IR Library
⑴Language Analysis (Filtering, Normalize, Tokenize…)
⑵Indexing and Storage (Lock-Free Indexing, Near-Real-Time Indexing…)
⑶Querying (50-over Query Implemantations, Parser, Scoring Model…)
16
Querying 機能を積極的に使って”検索”プラットフォーム
としてElasticsearchのQueryDSLを最大限利用
Lucene おさらい
17
Document
- field1
- field2
Text Analysis Chains
IndexWriter
DocumentWriter
Indexing Chain
QueryParser Query String
IndexReader
ScorerQuery
Indexing Chain Segment
Persistent Layer
SegmentReader
TermsEnum
PositionsEnum
概要
• 自己紹介
• Supership株式会社について
• QueryParser 実装してみた
• Lucene おさらい
• Lucene クエリ と 近接検索
• Domain Specific Query
• 今後の予定
18
Lucene クエリと近接検索
• Apache Lucene Query API
⑴基本的なクエリ (TermQuery, BooleanQuery…)
⑵曖昧検索系のクエリ (WildcardQuery, RegexpQuery…)
⑶近接検索系のクエリ (SpanQuery, PhraseQuery…)
19
Lucene クエリと近接検索
• Apache Lucene Query API
⑴基本的なクエリ (TermQuery, BooleanQuery…)
⑵曖昧検索系のクエリ (WildcardQuery, RegexpQuery…)
⑶近接検索系のクエリ (SpanQuery, PhraseQuery…)
20
• ユーザーの検索文字列から如何に意図を汲み取るかが重要
• ユーザーはトークナイズのロジックなど知る由も無い
• 品詞情報や同義語辞書、Term間距離等サービス側で考慮
Lucene クエリと近接検索
1. PhraseQuery
Term 間の距離を検索条件として付加できる
Search Phaseで Analyzer によるトークナイズが適用される
21
“cat dog bird”, slop: 3
cat birdhorse lizard dog
2 0
21
Matched Document
PhraseQuery
cat
TermQuery TermQuery TermQuery
dog bird
Lucene クエリと近接検索
2. SpanNearQuery
SpanTerm 間の距離、その順序を検索条件として付加できる
Search Phaseで Analyzer によるトークナイズが適用されない
22
“cat dog” bird, slop: 3
22
Matched Document
SpanNearQuery
cat
SpanTerm
Query
dog bird
SpanTerm
Query
SpanTerm
Query
cat birdhorse lizarddog
20
Lucene クエリと近接検索
3. SpanOrQuery
SpanQueryの結果をマージ
BooleanClauseは Occurrence からランキングを生成することが主目的
23
“cat dog bird”, slop: 3 OR “cat dog” bird, slop: 3
23
Matched Documents
SpanOrQuery
SpanNear
Query
SpanNear
Query
cat birdhorse lizarddog
20
cat birddog
0 0
概要
• 自己紹介
• Supership株式会社について
• QueryParser 実装してみた
• Lucene おさらい
• Lucene クエリ と 近接検索
• Domain Specific Query
• 今後の予定
24
Domain Specific Query
1. 外部 (実サービス向け) クエリ
2. 内部 (開発者向け) クエリ
3. 距離検索クエリ
25
{
"query": {
"hetero_query": {
"query": "this AND that",
"handler_name": "external_mapper”
}
}
}
{
"query": {
"hetero_query": {
"query": "this AND that",
"handler_name": ”internal_mapper”
}
}
}
Domain Specific Query
26
grammar ExternalQuery;
import CommonLexerRules;
query : (expression)+
;
expression : CONJUNCTION_AND clause
| CONJUNCTION_OR clause
| clause
;
clause : MODIFIER_REQUIRE field
| MODIFIER_NEGATE field
| field
;
field : {_input.LT(2).getType() == COLON}? SINGLE_LITERAL COLON term
| term
;
term : SINGLE_LITERAL # BareTerm | PHRASE_LITERAL # QuotedTerm ;
Domain Specific Query
27
grammar InternalQuery;
import CommonLexerRules;
query : (expression)+
;
expression : CONJUNCTION_AND clause
| CONJUNCTION_DIS clause
| CONJUNCTION_OR clause
| LPAREN query RPAREN
| clause
;
clause : MODIFIER_REQUIRE field (HAT SINGLE_LITERAL)?
| MODIFIER_NEGATE field (HAT SINGLE_LITERAL)?
| field (HAT SINGLE_LITERAL)?
;
field : {_input.LT(2).getType() == COLON}? SINGLE_LITERAL COLON term
| term
;
term : SINGLE_LITERAL # BareTerm | PHRASE_LITERAL # QuotedTerm ;
概要
• 自己紹介
• Supership株式会社について
• QueryParser 実装してみた
• Lucene おさらい
• Lucene クエリ と 近接検索
• Domain Specific Query
• 今後の予定
28
今後の予定
1. クエリ文法の充実 (Google等価等)
2. Synonym Map の AST API を用いた実装
3. 品詞による Term 結合の AST API を用いた実装
4. Span系クエリ文法の精査
5. ドキュメント作成
その他 Query Parser 以外にも順次コア機能を開発予定
公開可能なものは弊社リポジトリで公開
29

Contenu connexe

Similaire à Elasticsearch 20150107

ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索techtalkdwango
 
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話ktaro_w
 
データポータルソフトウェア CKAN
データポータルソフトウェア CKANデータポータルソフトウェア CKAN
データポータルソフトウェア CKANFumihiro Kato
 
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについてDaisuke Tamada
 
メディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearchメディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearchYasuhiro Murata
 
SORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップ
SORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップSORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップ
SORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップSORACOM,INC
 
EC2上でパケットをミラーリング
EC2上でパケットをミラーリングEC2上でパケットをミラーリング
EC2上でパケットをミラーリングKenta Yasukawa
 
DVGA writeup
DVGA writeupDVGA writeup
DVGA writeupYu Iwama
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤Sotaro Kimura
 
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_searchKazuhiro Wada
 
Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト健一 辰濱
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...Amazon Web Services Japan
 
ICSE2014参加報告 (SE勉強会 6/12)
ICSE2014参加報告 (SE勉強会 6/12)ICSE2014参加報告 (SE勉強会 6/12)
ICSE2014参加報告 (SE勉強会 6/12)Kazunori Sakamoto
 
Om Next ~React.jsを超えて
Om Next ~React.jsを超えてOm Next ~React.jsを超えて
Om Next ~React.jsを超えてKazuki Tsutsumi
 
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?Sotaro Kimura
 
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Sotaro Kimura
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015Masahiro Nagano
 
Laravelの検索機能の実装方法
Laravelの検索機能の実装方法Laravelの検索機能の実装方法
Laravelの検索機能の実装方法yoshitaro yoyo
 

Similaire à Elasticsearch 20150107 (20)

ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索
 
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話
 
solr勉強会資料
solr勉強会資料solr勉強会資料
solr勉強会資料
 
データポータルソフトウェア CKAN
データポータルソフトウェア CKANデータポータルソフトウェア CKAN
データポータルソフトウェア CKAN
 
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
 
メディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearchメディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearch
 
SORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップ
SORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップSORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップ
SORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップ
 
EC2上でパケットをミラーリング
EC2上でパケットをミラーリングEC2上でパケットをミラーリング
EC2上でパケットをミラーリング
 
DVGA writeup
DVGA writeupDVGA writeup
DVGA writeup
 
CKAN日本語化班
CKAN日本語化班CKAN日本語化班
CKAN日本語化班
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤
 
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search
 
Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
 
ICSE2014参加報告 (SE勉強会 6/12)
ICSE2014参加報告 (SE勉強会 6/12)ICSE2014参加報告 (SE勉強会 6/12)
ICSE2014参加報告 (SE勉強会 6/12)
 
Om Next ~React.jsを超えて
Om Next ~React.jsを超えてOm Next ~React.jsを超えて
Om Next ~React.jsを超えて
 
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
 
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
 
Laravelの検索機能の実装方法
Laravelの検索機能の実装方法Laravelの検索機能の実装方法
Laravelの検索機能の実装方法
 

Elasticsearch 20150107

  • 1. Lucene Query 再考 - Domain Specific Query 実装 - 07/01/2015
  • 2. 概要 • 自己紹介 • Supership株式会社について • QueryParser 実装してみた • Lucene おさらい • Lucene クエリ と 近接検索 • Domain Specific Query • 今後の予定 2
  • 3. 概要 • 自己紹介 • Supership株式会社について • QueryParser 実装してみた • Lucene おさらい • Lucene クエリ と 近接検索 • Domain Specific Query • 今後の予定 3
  • 4. 自己紹介 • 大川 真吾 GitHub @shingoOKAWA Twitter @okawa_shingo • Supership株式会社 インフラ事業開発本部検索グループ エンジニア 2015年11月入社 • バックエンドエンジニア (Elasticsearch歴 3ヶ月目 池田さん感謝) 検索エンジン関連バックエンド設計/実装全般 • 静岡出身、加速器工学専攻 (物理シミュレーションとか) • プログラミング好き 4
  • 5. 概要 • 自己紹介 • Supership株式会社について • QueryParser 実装してみた • Lucene おさらい • Lucene クエリ と 近接検索 • Domain Specific Query • 今後の予定 5
  • 6.
  • 8. 概要 • 自己紹介 • Supership株式会社について • QueryParser 実装してみた • Lucene おさらい • Lucene クエリ と 近接検索 • Domain Specific Query • 今後の予定 8
  • 9. Query Parser 実装してみた • こんな Query Parser 実装してみた ⑴クエリテキストレベルで近接検索(Proximity Search) や 分離検索(DisMax) 対応 ⑵文法の違いをクエリテキストレベルで隠蔽 ⑶簡素な BNF で DSQ(Domain Specific Query) を簡単に実装可能 ⑷構文木 (Concrete/Abstract Syntax Tree) 周りの API 対応 9 検索プラットフォームの実現
  • 10. Query Parser 実装してみた • 何が嬉しいの? ⑴距離などを考慮したより詳細な検索実現 ⑵検索プラットフォーム実現によりプロダクト・サービスの多様化、統合対応 ⑶小さなコストで種々の検索UX改善サイクルを回せる ⑷トークンの揺らぎ(同義語など)等を、プログラマブルに構文木レベルで対応 10
  • 11. Query Parser 実装してみた 1. 近接検索 PhraseQuery や SpanQuery (後述) Term 間の距離を検索条件として付加できる 11 PhraseQuery: “cat dog bird”, slop: 3 SpanQuery: “cat dog” bird, slop: 3 cat birdhorse lizard dog 2 0 cat birdhorse lizarddog 20
  • 12. Query Parser 実装してみた 2. 文法の隠蔽 (Hetero Grammar) 12
  • 13. Query Parser 実装してみた 3. 直感的で分かりやすい ANTLR BNF 既存実装 QueryParser.jj と比較して直感的で分かりやすい 13 Query Query(String field) : { Query q, firstQuery=null; int conj, mods; } { mods=Modifiers() q=Clause(field) { addClause(clauses, CONJ_NONE, mods, q); if (mods == MOD_NONE) firstQuery=q; } : : grammar ExternalQuery; import CommonLexerRules; query : (expression)+ ; expression : CONJUNCTION_AND clause | CONJUNCTION_OR clause | clause ; : : :
  • 14. Query Parser 実装してみた 4. 構文木 API Concrete Syntax Tree や Abstract Syntax Tree を用いて解析フェーズを多段階に 品詞による Term 結合や Synonym 等の揺らぎをよりフレキシブルに対応可能 14Concrete Syntax Tree OR FF ドラクエ Abstract Syntax Tree BooleanClause AT SAME POSITION FF Final Fantasy ファイファン TAG: BOOLEAN TAG: TERM TAG: TERM
  • 15. 概要 • 自己紹介 • Supership株式会社について • QueryParser 実装してみた • Lucene おさらい • Lucene クエリ と 近接検索 • Domain Specific Query • 今後の予定 15
  • 16. Lucene おさらい • Apache Lucene IR Library ⑴Language Analysis (Filtering, Normalize, Tokenize…) ⑵Indexing and Storage (Lock-Free Indexing, Near-Real-Time Indexing…) ⑶Querying (50-over Query Implemantations, Parser, Scoring Model…) 16 Querying 機能を積極的に使って”検索”プラットフォーム としてElasticsearchのQueryDSLを最大限利用
  • 17. Lucene おさらい 17 Document - field1 - field2 Text Analysis Chains IndexWriter DocumentWriter Indexing Chain QueryParser Query String IndexReader ScorerQuery Indexing Chain Segment Persistent Layer SegmentReader TermsEnum PositionsEnum
  • 18. 概要 • 自己紹介 • Supership株式会社について • QueryParser 実装してみた • Lucene おさらい • Lucene クエリ と 近接検索 • Domain Specific Query • 今後の予定 18
  • 19. Lucene クエリと近接検索 • Apache Lucene Query API ⑴基本的なクエリ (TermQuery, BooleanQuery…) ⑵曖昧検索系のクエリ (WildcardQuery, RegexpQuery…) ⑶近接検索系のクエリ (SpanQuery, PhraseQuery…) 19
  • 20. Lucene クエリと近接検索 • Apache Lucene Query API ⑴基本的なクエリ (TermQuery, BooleanQuery…) ⑵曖昧検索系のクエリ (WildcardQuery, RegexpQuery…) ⑶近接検索系のクエリ (SpanQuery, PhraseQuery…) 20 • ユーザーの検索文字列から如何に意図を汲み取るかが重要 • ユーザーはトークナイズのロジックなど知る由も無い • 品詞情報や同義語辞書、Term間距離等サービス側で考慮
  • 21. Lucene クエリと近接検索 1. PhraseQuery Term 間の距離を検索条件として付加できる Search Phaseで Analyzer によるトークナイズが適用される 21 “cat dog bird”, slop: 3 cat birdhorse lizard dog 2 0 21 Matched Document PhraseQuery cat TermQuery TermQuery TermQuery dog bird
  • 22. Lucene クエリと近接検索 2. SpanNearQuery SpanTerm 間の距離、その順序を検索条件として付加できる Search Phaseで Analyzer によるトークナイズが適用されない 22 “cat dog” bird, slop: 3 22 Matched Document SpanNearQuery cat SpanTerm Query dog bird SpanTerm Query SpanTerm Query cat birdhorse lizarddog 20
  • 23. Lucene クエリと近接検索 3. SpanOrQuery SpanQueryの結果をマージ BooleanClauseは Occurrence からランキングを生成することが主目的 23 “cat dog bird”, slop: 3 OR “cat dog” bird, slop: 3 23 Matched Documents SpanOrQuery SpanNear Query SpanNear Query cat birdhorse lizarddog 20 cat birddog 0 0
  • 24. 概要 • 自己紹介 • Supership株式会社について • QueryParser 実装してみた • Lucene おさらい • Lucene クエリ と 近接検索 • Domain Specific Query • 今後の予定 24
  • 25. Domain Specific Query 1. 外部 (実サービス向け) クエリ 2. 内部 (開発者向け) クエリ 3. 距離検索クエリ 25 { "query": { "hetero_query": { "query": "this AND that", "handler_name": "external_mapper” } } } { "query": { "hetero_query": { "query": "this AND that", "handler_name": ”internal_mapper” } } }
  • 26. Domain Specific Query 26 grammar ExternalQuery; import CommonLexerRules; query : (expression)+ ; expression : CONJUNCTION_AND clause | CONJUNCTION_OR clause | clause ; clause : MODIFIER_REQUIRE field | MODIFIER_NEGATE field | field ; field : {_input.LT(2).getType() == COLON}? SINGLE_LITERAL COLON term | term ; term : SINGLE_LITERAL # BareTerm | PHRASE_LITERAL # QuotedTerm ;
  • 27. Domain Specific Query 27 grammar InternalQuery; import CommonLexerRules; query : (expression)+ ; expression : CONJUNCTION_AND clause | CONJUNCTION_DIS clause | CONJUNCTION_OR clause | LPAREN query RPAREN | clause ; clause : MODIFIER_REQUIRE field (HAT SINGLE_LITERAL)? | MODIFIER_NEGATE field (HAT SINGLE_LITERAL)? | field (HAT SINGLE_LITERAL)? ; field : {_input.LT(2).getType() == COLON}? SINGLE_LITERAL COLON term | term ; term : SINGLE_LITERAL # BareTerm | PHRASE_LITERAL # QuotedTerm ;
  • 28. 概要 • 自己紹介 • Supership株式会社について • QueryParser 実装してみた • Lucene おさらい • Lucene クエリ と 近接検索 • Domain Specific Query • 今後の予定 28
  • 29. 今後の予定 1. クエリ文法の充実 (Google等価等) 2. Synonym Map の AST API を用いた実装 3. 品詞による Term 結合の AST API を用いた実装 4. Span系クエリ文法の精査 5. ドキュメント作成 その他 Query Parser 以外にも順次コア機能を開発予定 公開可能なものは弊社リポジトリで公開 29