[解決済み] Elasticsearchで部分一致を行うにはどうしたらいいですか?
質問内容
以下のようなリンクがあります。 http://drive.google.com で、リンクから "google" をマッチさせたいのです。
持っています。
query: {
bool : {
must: {
match: { text: 'google'}
}
}
}
しかし、これはテキスト全体が 'google' である場合にのみマッチします(大文字と小文字を区別しないので、Google や GooGlE などにもマッチします)。他の文字列の中の'google'にマッチするにはどうすればよいのでしょうか?
どのように解決するのですか?
ポイントは、使用しているElasticSearchの正規表現が を必要とします。 完全文字列一致 :
Lucene のパターンは常にアンカーで固定される . 提供されるパターン は文字列全体と一致しなければなりません。 .
このように、任意の文字(ただし改行)にマッチさせるためには、次のようにします。
.*
のパターンがあります。
match: { text: '.*google.*'}
^^ ^^
もう一つのバリエーションは、文字列が改行される可能性がある場合です。
match: { text: '(.|\n)*google(.|\n)*'}
. このひどい
(.|\n)*
はElasticSearchでは必須となります。
[\s\S]
の回避策や、DOTALL/Singleline フラグを使用することができます。
Lucene の正規表現エンジンは Perl と互換性がなく、より少ない種類の演算子をサポートしています。
しかし 複雑なパターンにマッチする予定がなく、単語境界のチェックも必要ない場合は、単なる部分文字列の正規表現検索を行うほうがよいでしょう。 ワイルドカード検索 :
{
"query": {
"wildcard": {
"text": {
"value": "*google*",
"boost": 1.0,
"rewrite": "constant_score"
}
}
}
}
参照 ワイルドカード検索 をご覧ください。
注意事項 : ワイルドカードパターンは入力文字列全体にもマッチする必要があります。
-
google*
はすべての文字列を検索します で始まるgoogle
-
*google*
はすべての文字列を検索します を含むgoogle
-
*google
はすべての文字列を検索します で終わるgoogle
また、ワイルドカードパターンで唯一の特殊文字の組を覚えておいてください。
?, which matches any single character
*, which can match zero or more characters, including an empty one
関連
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] コマンドラインを使用してJSONオブジェクトの項目をカウントする方法は?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] ページを再読み込みせずにURLを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptでクエリ文字列の値を取得するにはどうすればよいですか?
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] JSONデータをファイルに書き込むにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】jq: 文字列で配列のインデックスを作成できない
-
[解決済み] ネストしたng-repeat
-
stdClass 型のオブジェクトを配列として使用できない
-
[解決済み] 複数の配列を持つJSONオブジェクトを作るにはどうしたらいいですか?
-
[解決済み] kubectl get pods の json フォーマットの出力を jsonpath でパースする方法
-
[解決済み] JSON APIのレスポンス形式には規格がありますか?
-
[解決済み] ASP.NETでJSONを単純なDictionary<string,string>にデシリアライズするにはどうすればよいですか?
-
[解決済み] バイナリデータをJSON文字列で。Base64より優れたもの
-
[解決済み] JSONでnullを表現する
-
[解決済み] PostgreSQL は結果セットを JSON 配列として返しますか?