2016-07-07 1 views
0

私は 'または'検索と思われるものを返す弾性検索クエリを持っています。弾性検索ネストクライアントはv4.0.30319、弾性検索サーバーはバージョン1.6.0です。 'and'検索は索引 'sc'にあります。 "該当するデータベーステーブルに対して '%Helping%' 'のような'%business% 'や... profileのようなプロファイルが存在しない場合は、クライアントからselect *を実行する同等のSQL文がレコードを返しません。どのように私はブール値の 'と'検索を実行するために、次のクエリやコードを変更するのですか?ElasticSearch.Nestクライアント内でブール値 'and'を検索する

query = 'id:("7ee683c2-19eb-45c6-9ca8-985379ce34dd") 
     AND role:("User","OrganizationAdmin","SystemAdmin","follower") 
     AND ( 
       sc:("business*") 
       and sc:("objectives*") 
       and sc:("memorable*") 
       and sc:("Keith*") 
       and sc:("Lawyer*") 
       and sc:("accountant*") 
       and sc:("Helping*"))' ; 

result = _client.Search<T>(
t => t.Types(type).Index(_index).Query(
    qt => qt.QueryString(qs => qs.Query(query).OnFields(fields))).Filter(
     x => x.Range(y => y.From(fromDate).To(toDate).OnField(rangeOnField)) 
    ).SortDescending(orderByField).SortDescending("_score").Skip(skipRecord).Take(pageSize)); 

result.ConnectionStatusには本当に役立つ生弾性検索クエリが含まれていることがわかりました。ベースのクエリを使用して、手でSCのブール基準に追加する

私はコードで起こって奇妙なものがある推測しているので、結果を返しません
{ 
     "from": 0, 
     "size": 100, 
     "sort": { 
     "cd": "desc", 
     "_score": "desc" 
     }, 
     "query": { 
     "query_string": { 
      "query": "id:(\"7ee683c2-19eb-45c6-9ca8-985379ce34dd\") AND role:(\"User\",\"OrganizationAdmin\",\"SystemAdmin\",\"follower\") AND (sc:(\"business*\") AND sc:(\"objectives*\") AND sc:(\"memorable*\") AND sc:(\"Keith*\") AND sc:(\"Lawyer*\") AND sc:(\"accountant*\") AND sc:(\"Helping*\")) ", 
      "fields": [ 
      "id", 
      "sc", 
      "role", 
      "nm" 
      ] 
     } 
     }, 
     "filter": { 
     "range": { 
      "cd": { 
      "from": "19160709", 
      "to": "21160709" 
      } 
     } 
     } 
    } 

などの生検索条件を与えます。

+1

ここにある例はコンパイルされません。あなたは実例を提供することができますか?また、NESTのどのバージョンを使用していますか、どのバージョンのElasticsearchをターゲットにしていますか? –

+0

私は@RussCamというコードを維持していますので、コンパイル可能なバージョンを取得するとしばらく時間がかかります。私は生の弾性検索json文字列を入手する方法を発見しました。ネストクライアントはv4.0.30319です。弾性検索バージョンは1.6.0 –

+1

ok coolです。 Elasticsearch 1.6.0を使用している場合は、NEST 1.xのマイナーバージョンを使用できますが、常に最新の1.xバージョン(現在は1.8.3 - https://www.nuget)を使用することをお勧めします。 org/packages/NEST/1.8.3。 'ElasticClient.LowLevel'を介して' ElasticClient'でアクセス可能な低レベルのクライアントでは、必要に応じて未処理のjson文字列または匿名の型をリクエストに送信できます - https://www.elastic.co/guide/en/elasticsearch/client /net-api/1.x/building-requests.html –

答えて

0

変更が必要なクエリが判明しました。 'と' AND 'にする必要がありました。

このクエリ

{ 
    "from": 0, 
    "size": 100, 
    "sort": { 
     "cd": "desc", 
     "_score": "desc" 
    }, 
    "query": { 
     "query_string": { 
      "query": "id:(\"7ee683c2-19eb-45c6-9ca8-985379ce34dd\") AND role:(\"User\",\"OrganizationAdmin\",\"SystemAdmin\",\"follower\") AND (sc:(\"business*\") AND sc:(\"objectives*\") AND sc:(\"memorable*\") AND sc:(\"Keith*\") AND sc:(\"Lawyer*\") AND sc:(\"accountant*\") AND sc:(\"Helping*\")) ", 
      "fields": [ 
       "id", 
       "sc", 
       "role", 
       "nm" 
      ] 
     } 
    }, 
    "filter": { 
     "range": { 
      "cd": { 
       "from": "19160709", 
       "to": "21160709" 
      } 
     } 
    } 
} 

には、レコードを返さない働いていたが、このクエリ

{ 
    "from": 0, 
    "size": 100, 
    "sort": { 
     "cd": "desc", 
     "_score": "desc" 
    }, 
    "query": { 
     "query_string": { 
      "query": "id:(\"7ee683c2-19eb-45c6-9ca8-985379ce34dd\") AND role:(\"User\",\"OrganizationAdmin\",\"SystemAdmin\",\"follower\") AND ( sc:(\"business\") and sc:(\"objectives\") and sc:(\"memorable\") and sc:(\"Keith\") and sc:(\"Lawyer\") and sc:(\"accountant\") and sc:(\"Helping\")) ", 
      "fields": [ 
       "id", 
       "sc", 
       "role", 
       "nm" 
      ] 
     } 
    }, 
    "filter": { 
     "range": { 
      "cd": { 
       "from": "19160709", 
       "to": "21160709" 
      } 
     } 
    } 
} 

は3つのレコードを返す失敗しました。唯一の違いは、フィールド 'sc'の括弧内の 'と'の場合です。

+1

Luceneのクエリー・ストリング・フォーマットはちょっと難しいかもしれません:)もしそれがもっと分かりやすいならば、常にboolクエリーからより明示的にそれを展開することができます。あなたが考えるかもしれない追加的な変更は 'query '部分が' querystring'クエリで、 'filter'部分が' range'フィルタ(query)である 'filtered'クエリに移動することです。トップレベルの 'filter'(2.x以降の' post_filter'と呼ばれる)は、若干異なる目的を果たします - https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-post- filter.html –

関連する問題