2016-12-02 8 views
0

私はElasticSearch 5を使用しており、次の解決策を見つけることができません: ドキュメント内のスラッシュ(URLの一部)を含む文字列を検索したいとします。しかし、一致する文書は返されません。 スラッシュ付きの文字列がESで分割されているものを読んだことがあります。これは、このフィールドに必要なものではありません。私はマッピングでフィールドに "not_analyzed"を設定しようとしましたが、何とか動作するようには見えません。URLの一部のElasticSearch検索

"インデックスの作成":http://localhost:9200/test

{ 
    "settings" : { 
     "number_of_shards" : 1 
    }, 
    "mappings" : { 
     "type1" : { 
      "properties" : { 
       "field1" : { "type" : "text","index": "not_analyzed" } 
      } 
     } 
    } 
} 

は、 "ドキュメントの追加" 入れ :POST http://localhost:9200/test/type1/

{ 
    "field1" : "this/is/a/url/test" 
} 

"検索ドキュメント" POST http://localhost:9200/test/type1/_search

{ 
    "size" : 1000, 
    "query" : { 
     "bool" : { 
      "must" : [{ 
        "term" : { 
         "field1" : { 
          "value" : "this/is/a/url/test" 
         } 
        } 
       } 
      ] 
     } 
    } 
} 

応答:

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

"マッピング応答":私はあなたが必要なものを疑うhttp://localhost:9200/test/_mapping?pretty

{ 
    "test": { 
    "mappings": { 
     "type1": { 
     "properties": { 
      "field1": { 
      "type": "text" 
      } 
     } 
     } 
    } 
    } 
} 

答えて

1

正確な一致を得るためにtermクエリを使用するのは正しいです。しかし、あなたの最初のマッピングは間違っています。あなたのインデックスと再を削除する必要があり

"type" : "text", "index": "not_analyzed" 

ではなく、この

"type": "keyword" 

(ES5でkeywordタイプがES 2.xでnot_analyzedstringと同等であることに注意してください)でなければなりません修正されたマッピングで作成します。その後、termクエリが機能します。

1

をGET Match query、ない規約クエリです。用語は単一の「用語」/単語を探しており、アナライザで要求を分解していません。

{ 
    "size" : 1000, 
    "query" : { 
     "bool" : { 
      "must" : [{ 
        "match" : { 
         "field1" : "this/is/a/url/test"        
        } 
       } 
      ] 
     } 
    } 
} 
+0

は、それが働いたように見えたが、私は別のドキュメントを追加するとき:{ \t "フィールド1": "DIT /である/ EEN/URL /テスト/ NOG/EEN" }だけの代わりに、返された 完全一致 – BvdVen

+0

2つのオプションがあります。 URLが文字列の一部になる場合は、引き続き "and"演算子との一致を使用できます。フィールドにURLだけが含まれる場合は、@valが正しいことを示します。私は前者の場合を想定した。 –

関連する問題