やりたいこと
C# で検索条件を動的に生成し、ElasticSearch で検索したいです。
特に、AND OR の組み合わせで複雑な検索条件を作りたいと考えています。
環境
Elasticsearch Version:6.6.1
NEST:6.0.0.0
開発言語:C#
開発環境:Visual Sutdio 2017、.NET Framework 4.6.1
現状
下記のコードで試しています。
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using Elasticsearch.Net; 5using Nest; 6 7namespace ConsoleApp1 8{ 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 var settings = new ConnectionSettings(new Uri("http://hoge:9200")); 14 var client = new ElasticClient(settings.DefaultIndex("hoge")); 15 16 IList<Report> hits = new List<Report>(); 17 var search = new SearchDescriptor<Report>(); 18 search.Type("hoge"); 19 search.Size(100); 20 QueryContainer condition; 21 22 // 検索文字の作成 23 var t1 = Query<Report>.Term(p => p.ttitle, "検索文字1"); 24 var t2 = Query<Report>.Term(p => p.ttitle, "検索文字2"); 25 26 // ここで複数条件を AND 又は OR でくっつけているのですが 27 // AND の場合うまく出力結果が出ない 28 // OR (condition = t1 || t2) の場合は結果が出る。 29 condition = t1 && t2; 30 31 search.Query(q => q.Bool(b => b.Must(conditon))); 32 33 try 34 { 35 var response = client.Search<Report>(search); 36 37 foreach(var hit in response.Hits) 38 { 39 hits.Add(hit.Source); 40 Console.WriteLine("id:" + hit.Source.id); 41 Console.WriteLine("タイトル:" + hit.Source.ttitle); 42 } 43 } 44 catch(Exception ex) 45 { 46 Console.WriteLine(ex.Message); 47 } 48 49 Console.WriteLine("検索結果:" + hits.Count); 50 Console.WriteLine("何かキーを押してください"); 51 Console.ReadKey(); 52 } 53 } 54 55 public class Report 56 { 57 public DateTime timestamp { get; set; } 58 public string version { get; set; } 59 public int id { get; set; } 60 public string ttitle { get; set; } 61 } 62 63}
JSON ではこのような検索をしたいと思っています。
JSON
1GET /hoge/_search 2{ 3 "query": { 4 "bool":{ 5 "must":[ 6 { 7 "term":{ 8 "ttitle": { 9 "value":"検索文字1" 10 } 11 } 12 }, 13 { 14 "term": { 15 "ttitle": { 16 "value": "検索文字2" 17 } 18 } 19 } 20 ] 21 } 22 } 23}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。