5

私は以下のコードに取り組んでいます。私がやりたいのは、オブジェクト自体によるクエリです。

例: 以下のようなオブジェクト フィールドに入力する検索フォームがあります。次に、フォームに入力したユーザーに基づいてエラスティック検索を検索します。

つまり、以下では、searchItem オブジェクトによってインデックスをクエリしたいと考えています。どうすれば簡単にできますか?

 class Program
 {
    static void Main(string[] args)
    {
        var p = new Program();

        var item1 = new Announcement() {Id=1, Title = "john", ContentText = "lorem", Bar =  false, Num =  99, Foo = "hellow"};

        //p.Index(item1, "add");

       var searchItem = new Announcement() {Title="john",Num=99};

        ElasticClient.Search<Announcement>();

        Console.Read();

    }

    public void Index(Announcement announcement, String operation)
    {
        var uriString = "http://localhost:9200";
        var searchBoxUri = new Uri(uriString);

        var settings = new ConnectionSettings(searchBoxUri);
        settings.SetDefaultIndex("test");

        var client = new ElasticClient(settings);

        if (operation.Equals("delete"))
        {
            client.DeleteById("test", "announcement", announcement.Id);
        }
        else
        {
            client.Index(announcement, "test", "announcement", announcement.Id);
        }
    }

    private static ElasticClient ElasticClient
    {
        get
        {
            try
            {
                var uriString = "http://localhost:9200";
                var searchBoxUri = new Uri(uriString);
                var settings = new ConnectionSettings(searchBoxUri);
                settings.SetDefaultIndex("test");
                return new ElasticClient(settings);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
4

1 に答える 1

5

できません :)

NEST は、部分的に満たされた POCO のみに基づいて最適なクエリ方法を推測することはできません。ネストされた用語クエリまたは has_child でラップされた用語クエリを実行する必要があるのは、OR または AND ですか? あなたは私のドリフトをキャッチします。

Nest には条件なしクエリと呼ばれる洗練された機能があり、次のようにクエリ全体を書き出すことができます。

ElasticClient.Search<Announcement>(s=>s
    .Query(q=>
        q.Term(p=>p.Title, searchItem.Title)
        && q.Term(p=>p.Num, searchItem.Num)
        //Many more queries use () to group all you want
    )
)

NEST は、Term に渡された引数が null または空であることを確認すると、単にクエリのその部分をレンダリングしません。

この機能の仕組みについて詳しくは、http://nest.azurewebsites.net/concepts/writing-queries.htmlをご覧ください。

于 2013-10-01T21:09:41.527 に答える