2016-05-03 11 views
2

スペースでワイルドカードクエリを実行しようとしています。単語ベースでは簡単に一致しますが、フィールドベースでは一致しません。スペースを使用したエラスティックサーチワイルドカードクエリ

フィールドをnot_analyzedにする必要がありますが、このタイプを設定すると、何も返されません。

これは、それが長期的に働くとのマッピングです:

{ 
    "denshop" : { 
    "mappings" : { 
     "products" : { 
     "properties" : { 
      "code" : { 
      "type" : "string" 
      }, 
      "id" : { 
      "type" : "long" 
      }, 
      "name" : { 
      "type" : "string" 
      }, 
      "price" : { 
      "type" : "long" 
      }, 
      "url" : { 
      "type" : "string" 
      } 
     } 
     } 
    } 
    } 
} 

これは、まったく同じクエリが何も返さないこれでマッピングです:

{ 
    "denshop" : { 
    "mappings" : { 
     "products" : { 
     "properties" : { 
      "code" : { 
      "type" : "string" 
      }, 
      "id" : { 
      "type" : "long" 
      }, 
      "name" : { 
      "type" : "string", 
      "index" : "not_analyzed" 
      }, 
      "price" : { 
      "type" : "long" 
      }, 
      "url" : { 
      "type" : "string" 
      } 
     } 
     } 
    } 
    } 
} 

クエリはここにある:

curl -XPOST http://127.0.0.1:9200/denshop/products/_search?pretty -d '{"query":{"wildcard":{"name":"*test*"}}}'

not_analyzedプロパティ:not_analyzedなし

{ 
    "took" : 3, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 0, 
    "max_score" : null, 
    "hits" : [ ] 
    } 
} 

応答:

{ 
    "took" : 4, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 5, 
    "max_score" : 1.0, 
    "hits" : [ { 
    ... 

編集:ここでは要求された情報

を追加すると、ドキュメントのリストがある:

{ 
    "took" : 2, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 5, 
    "max_score" : 1.0, 
    "hits" : [ { 
     "_index" : "denshop", 
     "_type" : "products", 
     "_id" : "3L1", 
     "_score" : 1.0, 
     "_source" : { 
     "id" : 3, 
     "name" : "Testovací produkt 2", 
     "code" : "", 
     "price" : 500, 
     "url" : "http://www.denshop.lh/damske-obleceni/testovaci-produkt-2/" 
     } 
    }, { 
     "_index" : "denshop", 
     "_type" : "products", 
     "_id" : "4L1", 
     "_score" : 1.0, 
     "_source" : { 
     "id" : 4, 
     "name" : "Testovací produkt 3", 
     "code" : "", 
     "price" : 666, 
     "url" : "http://www.denshop.lh/damske-obleceni/testovaci-produkt-3/" 
     } 
    }, { 
     "_index" : "denshop", 
     "_type" : "products", 
     "_id" : "2L1", 
     "_score" : 1.0, 
     "_source" : { 
     "id" : 2, 
     "name" : "Testovací produkt", 
     "code" : "", 
     "price" : 500, 
     "url" : "http://www.denshop.lh/damske-obleceni/testovaci-produkt/" 
     } 
    }, { 
     "_index" : "denshop", 
     "_type" : "products", 
     "_id" : "5L1", 
     "_score" : 1.0, 
     "_source" : { 
     "id" : 5, 
     "name" : "Testovací produkt 4", 
     "code" : "", 
     "price" : 666, 
     "url" : "http://www.denshop.lh/damske-obleceni/testovaci-produkt-4/" 
     } 
    }, { 
     "_index" : "denshop", 
     "_type" : "products", 
     "_id" : "6L1", 
     "_score" : 1.0, 
     "_source" : { 
     "id" : 6, 
     "name" : "Testovací produkt 5", 
     "code" : "", 
     "price" : 666, 
     "url" : "http://www.denshop.lh/tricka-tilka-tuniky/testovaci-produkt-5/" 
     } 
    } ] 
    } 
} 

not_analyzedがなければ、それは再これでターン:この(アスタリスクの前にスペースを気づか)と

curl -XPOST http://127.0.0.1:9200/denshop/products/_search?pretty -d '{"query":{"wildcard":{"name":"*testovací*"}}}'

でもない:

curl -XPOST http://127.0.0.1:9200/denshop/products/_search?pretty -d '{"query":{"wildcard":{"name":"*testovací *"}}}'

私はマッピングにnot_analyzedを追加すると、それはどんなIまったくヒットを返しませんワイルドカードクエリを入力します。

+0

一致し、それが必要ありませんどのような書類?例を挙げてください。 –

+0

要求されたデータで質問を更新しました。 –

+0

あなたの文書は大文字で 'not_analyzed'で索引付けされます。もちろん 'testovaci'(小文字の意味)を検索すると、大文字の' Testovaci'と一致しません。 –

答えて

2

テキストを小文字にするカスタムアナライザを追加します。次に、検索クエリで、テキストをに渡す前に、クライアントアプリケーションで小文字にします。

また、元の解析チェーンを維持するために、カスタムアナライザを使用するnameフィールドにサブフィールドを追加しました。

PUT /denshop 
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "keyword_lowercase": { 
      "type": "custom", 
      "tokenizer": "keyword", 
      "filter": [ 
      "lowercase" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "products": { 
     "properties": { 
     "name": { 
      "type": "string", 
      "fields": { 
      "lowercase": { 
       "type": "string", 
       "analyzer": "keyword_lowercase" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

そしてクエリがサブフィールドで動作します:

GET /denshop/products/_search 
{ 
    "query": { 
    "wildcard": { 
     "name.lowercase": "*testovací *" 
    } 
    } 
} 
+0

ありがとうございました:) –

関連する問題