elasticsearch filtreleme

emkoroglu (327) 6 yıl önce sordu

 

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"]))))))));

Toplam 0 cevap