SQLで言うところのlike文をElasticsearchで実現しようと思った。
term, matchを使えばできるかと思ったがうまくいかない。fuzzy関連もどうも用途が違う。
そんなこんなでちょっとめんどくさかったので共有。
実行環境
- Elasticsearch 1.7.3
Queryで部分一致
bool
クエリの中でワイルドカードを使って検索する。
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"FIELD": {
"name": "*hoge*"
}
}
}
]
}
}
}
これで「hoge」という文字列がnameプロパティに含まれているものを取ってくることができる。
Filterで部分一致
regexp
クエリで正規表現が使えるので、無理矢理検索する。
{
"post_filter": {
"regexp" : {
"comment" : ".*fuga.*"
}
}
}
今回はcommentプロパティが「fuga」という文字列を含んでいるものを取得してくる。
感想
多分だけれども、もっと簡単にできる気がしている。