1

単一のフィールドに複数の同様の条件を持つ NEST クライアントを使用して、ES からドキュメントを取得する必要があります。

私のクエリは次のとおりです。

SELECT * FROM Customer WHERE CustomerName LIKE '%john%' OR CustomerName Like '%george%'

私の弾性検索NESTクエリ(単一のような操作の場合)は次のとおりです。

var customers= ElasticSearchHelper.ElasticClient.SearchAsync<Customer>(body => body
                .Take(100000)
                .Filter(f => f
                    .And
                    (
                       fs=> fs.Query(q=> .QueryString(qs => qs
                                .Query("*" + SearchText + "*")
                                .OnField(new string[] { "FirstName"})
                                .DefaultOperator(Operator.or)
                                .MinimumShouldMatchPercentage(100)
                                .AnalyzeWildcard(true)))
                    )));
            return customers.Documents;

単一のフィールドで複数の like 操作を使用してこれを行うにはどうすればよいですか? 私が間違っていることを教えてください。

4

1 に答える 1

2

使用する必要があるのは、正規表現フィルターと組み合わせた OR フィルターです。

SearchDescriptor<T> searchDescriptor = new SearchDescriptor<T>();
FilterDescriptor<T> filterDescriptor = new FilterDescriptor<T>();

FilterContainer filterContainer1 = new FilterContainer();
filterContainer1 = filterDescriptor.Regexp(rg => 
                    rg.OnField("CustomerName").Value(".*" + "john" + ".*"));

FilterContainer filterContainer2 = new FilterContainer();
filterContainer2 = filterDescriptor.Regexp(rg => 
                    rg.OnField("CustomerName").Value(".*" + "george" + ".*"));

searchDescriptor.Filter(flt => 
            flt.Or(filterContainer1, filterContainer2));

var resulet = this.ElasticClient().Search<T>(body => searchDescriptor);

以下のクエリが生成されます (T はドキュメントのタイプです)。

  {
      "filter": {
        "or": {
          "filters": [
            {
              "regexp": {
                "CustomerName": {
                  "value": ".*john.*"
                }
              }
            },
            {
              "regexp": {
                "CustomerName": {
                  "value": ".*doe.*"
                }
              }
            }
          ]
        }
      }
    }
于 2014-11-03T10:56:35.263 に答える