2016-05-06 6 views
2

私の文書の中には、$記号または£記号があります。私は£を検索し、その記号を含む文書を検索したい。私はthe documentationに行きましたが、私はいくつかの認知的な不協和を得ています。通貨ドルおよびポンド記号の弾性検索インデックス検索

# Delete the `my_index` index 
DELETE /my_index  

# Create a custom analyzer 
PUT /my_index 
{ 
    "settings": { 
    "analysis": { 
     "char_filter": { 
     "&_to_and": { 
      "type": "mapping", 
      "mappings": [ 
      "&=> and ", 
      "$=> dollar " 
      ] 
     } 
     }, 
     "analyzer": { 
     "my_analyzer": { 
      "type": "custom", 
      "char_filter": [ 
      "html_strip", 
      "&_to_and" 
      ], 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase" 
      ] 
     } 
     } 
    } 
    } 
}  

これは単なるドキュメント状態として ""、、、 "迅速" "と"、 "ブラウン" "狐" が返されます。

# Test out the new analyzer 
GET /my_index/_analyze?analyzer=my_analyzer&text=The%20quick%20%26%20brown%20fox  

これは、 ""、 "速い" を返します、 "ドル"、 "ブラウン"、 "キツネ"

GET /my_index/_analyze?analyzer=my_analyzer&text=The%20quick%20%24%20brown%20fox  

追加するいくつかのレコード:

PUT /my_index/test/1 
{ 
    "title": "The quick & fast fox" 
}  

PUT /my_index/test/1 
{ 
    "title": "The daft fox owes me $100" 
}  

"ドル"を検索すると、結果が得られると思いましたか?

GET /my_index/test/_search 
{ "query": { 
    "simple_query_string": { 
     "query": "dollar" 
    } 
    } 
} 

あるいはアナライザで「$」を使用して::代わりに私は結果を取得しない

GET /my_index/test/_search 
{ "query": { 
    "query_string": { 
    "query": "dollar10", 
    "analyzer": "my_analyzer" 
    } 
} 
} 
+0

は、実際の分析されたデータをvertors:デフォルトのチェックなどのカスタムアナライザを設定するには、HTTPS://www.elastic .co/guide/en/elasticsearch/reference/current/docs-termvectors.html – alpert

答えて

1

をあなたの問題は、カスタム・アナライザを指定することですが、あなたはそれを使用することはありません。 term vertorsを使用すると、それを確認できます。だから、続くその手順:

作成し、 `titleフィールド用のインデックスを設定するカスタム・アナライザ:

GET /my_index 

{ 
    "settings": { 
    "analysis": { 
     "char_filter": { 
     "&_to_and": { 
      "type": "mapping", 
      "mappings": [ 
      "&=> and ", 
      "$=> dollar " 
      ] 
     } 
     }, 
     "analyzer": { 
     "my_analyzer": { 
      "type": "custom", 
      "char_filter": [ 
      "html_strip", 
      "&_to_and" 
      ], 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase" 
      ] 
     } 
     } 
    } 
    }, "mappings" :{ 
    "test" : { 
     "properties" : { 
     "title" : { 
      "type":"string", 
      "analyzer":"my_analyzer" 
     } 
     } 
    } 
    } 
} 

挿入データ:用語ベクトルのための

PUT my_index/test/1 

{ 
    "title": "The daft fox owes me $100" 
} 

チェック:

GET /my_index/test/1/_termvectors?fields=title 

レスポンス:

{ 
    "_index":"my_index", 
    "_type":"test", 
    "_id":"1", 
    "_version":1, 
    "found":true, 
    "took":3, 
    "term_vectors":{ 
     "title":{ 
     "field_statistics":{ 
      "sum_doc_freq":6, 
      "doc_count":1, 
      "sum_ttf":6 
     }, 
     "terms":{ 
      "daft":{ 
       "term_freq":1, 
       "tokens":[ 
        { 
        "position":1, 
        "start_offset":4, 
        "end_offset":8 
        } 
       ] 
      }, 
      "dollar100":{  <-- You can see it here 
       "term_freq":1, 
       "tokens":[ 
        { 
        "position":5, 
        "start_offset":21, 
        "end_offset":25 
        } 
       ] 
      }, 
      "fox":{ 
       "term_freq":1, 
       "tokens":[ 
        { 
        "position":2, 
        "start_offset":9, 
        "end_offset":12 
        } 
       ] 
      }, 
      "me":{ 
       "term_freq":1, 
       "tokens":[ 
        { 
        "position":4, 
        "start_offset":18, 
        "end_offset":20 
        } 
       ] 
      }, 
      "owes":{ 
       "term_freq":1, 
       "tokens":[ 
        { 
        "position":3, 
        "start_offset":13, 
        "end_offset":17 
        } 
       ] 
      }, 
      "the":{ 
       "term_freq":1, 
       "tokens":[ 
        { 
        "position":0, 
        "start_offset":0, 
        "end_offset":3 
        } 
       ] 
      } 
     } 
     } 
    } 
} 

今すぐ検索:マッチを見つけるでしょう

GET /my_index/test/_search 

{ 
    "query": { 
    "match": { 
     "title": "dollar100" 
    } 
    } 
} 

を。クエリ文字列で検索すると、次のようになります。

GET /my_index/test/_search 

{ "query": { 
    "simple_query_string": { 
     "query": "dollar100" 
    } 
    } 
} 

特別な_allフィールドを検索するためです。私が見ることができるように、分析されていないフィールドは集計されます。

GET /my_index/test/_search 

{ 
    "query": { 
    "match": { 
     "_all": "dollar100" 
    } 
    } 
} 

結果が見つかりませんでした。しかし:

GET /my_index/test/_search 

{ 
    "query": { 
    "match": { 
     "_all": "$100" 
    } 
    } 
} 

が見つかりました。私は確信していませんが、その理由は、デフォルトのアナライザがカスタムアナライザではないということです。あなたは用語で確認することができ

Changing the default analyzer in ElasticSearch or LogStash

http://elasticsearch-users.115913.n3.nabble.com/How-we-can-change-Elasticsearch-default-analyzer-td4040411.html

http://grokbase.com/t/gg/elasticsearch/148kwsxzee/overriding-built-in-analyzer-and-set-it-as-default

http://elasticsearch-users.115913.n3.nabble.com/How-to-set-the-default-analyzer-td3935275.html

+0

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