次のデフォルト構成のエラスティック検索ノードを使用しています
index :
analysis :
analyzer :
default_index :
type : custom
tokenizer : whitespace
filter :
- lowercase
- asciifolding
- stop
- my_ngram
char_filter : html_strip
default_search:
type : custom
tokenizer : whitespace
filter:
- lowercase
- asciifolding
- stop
char_filter : html_strip
filter:
my_ngram:
type: nGram
max_gram: 50
次に、インデックス「テスト」を作成します
curl -XPUT localhost:9200/test -d '{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 0
}
}
}'
私が投稿しました
curl -XPOST localhost:9200/test/sub -d '{"n1" : "so?:me"}'
として検索
curl -XPOST 'localhost:9200/test/sub/_search?pretty&q=\?'
上記のエントリで正しい結果が得られますが、そうすると
curl -XPOST localhost:9200/test/sub/_search -d '{
"query": {
"query_string": {
"query": "\?"
}
}
}'
以下のように例外が発生します
{
"error": "SearchPhaseExecutionException[Failed to execute phase [query_fetch], total failure;
shardFailures {[1fLLfu79Qou8RbdrI6y8qw][test][0]:
SearchParseException[[test][0]: from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"query_string": {
"query": "\\?"
}
}
}
]]];
nested: QueryParsingException[[test] Failed to parse];
nested: JsonParseException[Unrecognized character escape '?' (code 63)\n at [Source: [B@1601cda; line: 1, column: 45]]; }]",
"status": 500
}
ここで何が欠けているのかわからないのですか?
もう少し詳細を見つけましたが、もっと混乱しています。
私が投稿した場合
curl -XPOST localhost:9200/test/sub/_search -d '{
"query": {
"query_string": {
"query": "\\?"
}
}
}'
JSONエスケープ文字自体をエスケープする必要があるように見えます。しかし、私は投稿します
curl -XPOST localhost:9200/test/sub -d '{"n1" : "oi\\me"}'
そして今私が投稿した場合
curl -XPOST localhost:9200/test/sub/_search?pretty -d '{
"query": {
"query_string": {
"query": "\\\\"
}
}
}'
上記が以前に見つけたものが答えの最初の「\」だけを表していると仮定すると、理想的には結果が得られます
curl -XPOST localhost:9200/test/sub/_search?pretty -d '{
"query": {
"query_string": {
"query": "\\\\\\\\"
}
}
}'
動作するはずですが、動作しません。とても混乱しています。