質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Q&A

解決済

1回答

1520閲覧

Elasticsearch

tera-chan

総合スコア6

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

0グッド

2クリップ

投稿2019/10/29 08:02

編集2019/10/29 09:24

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

Elasticsearchを初めて使用しているのですが想定通りに検索できないため検索方法を教えていただけないでしょうか。
具体的に
「京都市」で検索すると「京都市」はもちろん検索できるのですが「東京都」まで検索結果に出てきます。
「京都」の部分でひっかかっているのでしょうが「京都市」で検索しているので「京都市」だけが結果に出てくるようにしたいです。
mapping.jsonの設定不備なのか検索側の検索方法の不備なのかわかりません。
お分かりになる方助けてください。
よろしくお願いいたします。

{ "query": { "multi_match": { "query": "京都市", "type": "best_fields", "fields": [ "shop_name", "address" ] } } } 設定JSON { "settings": { "number_of_replicas": "1", "number_of_shards": "5", "refresh_interval": "60s", "max_result_window" : "100000", "analysis": { "filter": { "pos_filter": { "type": "kuromoji_part_of_speech", "stoptags": [ "助詞-格助詞-一般", "助詞-終助詞" ] }, "greek_lowercase_filter": { "type": "lowercase", "language": "greek" }, "synonym_filter" : { "type" : "synonym", "synonyms_path" : "analysis/synonym.txt" } }, "tokenizer": { "kuromoji": { "type": "kuromoji_tokenizer", "user_dictionary": "analysis/ec_dic.dic" }, "ngram_tokenizer": { "type": "nGram", "min_gram": "2", "max_gram": "3", "token_chars": [ "letter", "digit" ] } }, "analyzer": { "kuromoji_analyzer": { "type": "custom", "tokenizer": "kuromoji", "char_filter": "html_strip", "filter": [ "kuromoji_baseform", "pos_filter", "greek_lowercase_filter", "cjk_width", "synonym_filter" ] }, "ngram_analyzer": { "tokenizer": "ngram_tokenizer", "filter": [ "greek_lowercase_filter", "cjk_width" ] } } } }, "mappings" : { "shop" : { "_source": { "enabled": true }, "_all" : { "enabled" : false, "analyzer" : "ngram_analyzer" }, "properties" : { "shop_name" : { "type" : "text", "analyzer" : "ngram_analyzer" }, "address" : { "type" : "text", "analyzer" : "ngram_analyzer" } } } } }
エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nskydiving

2019/10/29 09:04

以下の情報を追記していただけますでしょうか。 ・クエリコマンド(JSON形式) ・検索対象のドキュメント(JSON形式) ・使用している日本語トークナイザ(kuromoji など)
nskydiving

2019/10/29 09:16

追記情報はコメント欄ではなく、質問欄を修正するようにしてください。(コメント欄は見ない回答者がいるので) また、JSONは<code>(コードの挿入)を使用してください。
tera-chan

2019/10/29 09:18

失礼しました。
guest

回答1

0

ベストアンサー

query をダブルクォーテーションで括るとどうでしょうか。

curl -s 'localhost:9200/test/type/_search?pretty' -d ' { "explain": true, "query":{ "query_string":{ "default_field" : "pref_name", "query":"\"京都市\"" } } }'

参考:Elasticsearch 日本語でフレーズ検索が必要なわけ > 日本語で検索した際に検索結果が異様に膨らむ理由と、正確にマッチさせたい場合の方法
https://medium.com/hello-elasticsearch/elasticsearch-22a369387dc5

投稿2019/10/29 08:28

編集2019/10/29 08:29
nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tera-chan

2019/10/29 08:56

ご回答ありがとうございます。 試させていただきましたが違うようです。。
tera-chan

2019/10/29 11:14

すみません、、いただいた記述で期待通り検索されました。 「"type": "best_fields"」という不要な記述を入れていたためできていませんでした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問