elasticsearch filtreleme

0

 

Merhaba,

elasticsearch'de filtreleme yapmaya çalışıyorum fakat ilgili kelime girince hem filtereleme hemde ilgili kelime filtreleri uyuşmuyor. karışık data getiriyor. Örnek map'i ve sorgu kodlarını paylaşıyorum. şimdiden teşekkürler.

Map

"hits": [
      {
        "_index": "product_search_test2",
        "_type": "product",
        "_id": "AWJ3ZQYjD7ORUm25R5y1",
        "_score": 8.649974,
        "_source": {
          "partNumber": "GB-10570",
          "partDescription": "SU POMPASI",
          "searchKey": "GB-10570 SU POMPASI DEVIRDAIM   DEVIRDAIM",
          "warehouse": [
            {
              "code": "001",
              "name": "Ana Depo",
              "stock": 2797
            },
            {
              "code": "ARZ",
              "name": "Arızalı Depo",
              "stock": 2
            }
          ]
        }
      }
    ]

Sorgu

  • aranan kelime "hava" diyelim. searchKey değişkeninde ilgili kelimeleri eşleştirdikten sonra ön taraftan depo filtrelemesi yapılmaktadır. warehouse 001 seçildiği zaman hem hava kelimesi hemde depo kodu 001'de stok olan parçaları listelemek istiyorum. bunları stok miktarı yüksek olandan başlayarak sıralamaya çalışıyorum.
ISearchResponse<ProductSearchEM> RetVal = null;
            int pageSize = 10;
            page = page == 0 ? 1 : page;
            RetVal = _elasticClient.Search<ProductSearchEM>(src => src
                    .Index(indexName).Type("product")
                    .From(page * pageSize)
                    .Size(pageSize)


                    .Query(q => q
                    .Nested(n => n.Query(cc => cc
                      .Bool(b => b
                              .Should(
                               mre => mre.MatchPhrasePrefix(mach => mach.Field("searchKey").Query(keyword))

                              ).Filter(f => f.Bool(bol => bol.Must(bs =>

                                               bs.Terms(term=>term.Field("warehouse.code").Terms(["001"]))
                                                                                                                   
                              )))))
                    )).Sort(s =>
                            s.Field(f => f.Field("warehouse.stock")
                                    .Order(SortOrder.Descending)
                                    //.NestedPath("warehouse")
                                    .NestedFilter(n =>
                                                    n.Bool(b =>
                                                    b.Must(m =>
                                                           m.Terms(t =>
                                                                   t.Field("warehouse.code")
                                                                   .Terms(["001"]))))))));
emkoroglu emkoroglu (327)
5 yıl önce sordu

    Toplam 0 Cevap


    üyelik gerektirir

    Cevap yazabilmek için üye girişi yapmalısınız.

    Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
    uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol