2016-04-13 9 views
0

私はElasticsearch 2.2.0を使用していますが、これも1.xバージョンで発生します。エラスティックサーチ:単純なクエリが期待した結果を返さない

テキストフィールドの1つに「google.com」という単語が含まれています。 Googleを検索しようとすると、ElasticSearchは何も返しません。しかし、google.comを検索すると、それを含むドキュメントが返されます。私はグーグルを検索したとき弾性検索がドキュメントを返す作るために何をすべき

query: { 
    filtered: { 
    query: { 
     simple_query_string: { 
     query: "google" 
     } 
    } 
    } 
} 

私のクエリは、このような何か簡単なのですか?

+0

ワイルドカードクエリで試しましたか? – AlainIb

+0

@AlainIb google *?はい、この場合は、必要なドキュメントと、クエリに完全に関連していない他の多くのドキュメントを返します。 – Fernando

答えて

0

simple_query_stringが何も指定されていない、このフィールドを使用していますので、私は、_allフィールドについてthe documentationを読んでお勧めあなたの場合。

_allgoogle.com.で分割されず、google.comとして索引付けされることを意味standardアナライザとデフォルトによって索引付けされます。つまり、google.comを検索するとインデックスにこの用語が表示されますが、テキストにはgoogleが表示されます。

Elasticsearchでの検索は、クエリに関するものだけでなく、であるだけでなく、データをインデックスする方法についてもです。 と同じように単純ではないかもしれませんが、同時にとのSQLクエリでは、より多くの力がに入力されます。時間はSQLより長くなります。あなたから欲しいものに応じて

simple_queryあなたが選択するための複数のオプションを持っているから:

  • 変更_all場の解析:
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "letter": { 
      "type": "custom", 
      "tokenizer": "letter", 
      "filter": [ 
      "lowercase" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "test": { 
     "_all": { 
     "analyzer": "letter" 
     } 

とクエリ:

"query": { 
    "simple_query_string": { 
     "query": "google" 
    } 
    } 
  • 変更あなたのfieldと**のアナライザはquery_string_queryにそのフィールドを使用します。
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "letter": { 
      "type": "custom", 
      "tokenizer": "letter", 
      "filter": [ 
      "lowercase" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "test": { 
     "properties": { 
     "text": { 
      "type": "string", 
      "analyzer": "letter" 
     } 
     } 

と問合せ:

"query": { 
    "simple_query_string": { 
     "query": "google", 
     "fields": ["text"] 
    } 
    } 
を定義します
0

は、私は「ワイルドカード」のクエリとクエリのこの種を行う

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html

{ 
    "query": { 
    "bool": { 
     "must": { 
     "wildcard": { 
      "fieldname": "google*" // replace the fieldname her 
     } 
     } 
    } 
    } 
} 
+0

「term1 -term2」のようなものを使うことがあるので、私はsimple_queryをユーザに公開しています。 Googleを検索するだけで結果を返すようにsimple_queryを調整することはできませんか?これは、LIKEを使ったSQLクエリーがこの結果を返すので簡単なものです(これはかなり明白です)。 – Fernando

関連する問題