NEST匹配查询问题

问题描述 投票:0回答:1

我目前正在为手机数据库的NEST搜索工作。我对动态版本的东西运气很少,因为用户可以过滤某些术语以在前端搜索。

这是因为NEST不喜欢用变量替换字段“f.something”。由于这个原因,我已经去了静态,因为我相信我可以通过一些对象实例化来做到这一点。

然而,现在即使我收到有效的NEST回复,他们也总是空着,即使显然有结果。例如字段的“名称”和查询的“iPhone”。我错过了什么?提前致谢。

附:已注释掉的代码曾用于“bool”和“should”检查,但同样地,我一直没有得到任何结果。

private ISearchResponse<MasterProduct> SearchThis(ElasticClient client, string query, string field, int pageSize, int recordNumber)
        {
            var searchLayout = new SearchRequest<MasterProduct>
            {
                Size = pageSize,
                From = recordNumber,
                Query = new MatchQuery
                {
                    Field = field,
                    Query = query,
                    Fuzziness = Fuzziness.Auto,
                    PrefixLength = 2,
                    Lenient = true,
                    FuzzyRewrite = MultiTermQueryRewrite.TopTermsBlendedFreqs(10)
                }
            };
            var searchResponse = client.Search<MasterProduct>(searchLayout);
            return searchResponse;
            }

            /*var searchResponse = client.Search<MasterProduct>(s => s
                .From(recordNumber)
                .Size(pageSize)
                .Query(q => q
                .Match(a => a
                    .Field(f => f.MasterProductName) 
                    .Query(query)
                    .Fuzziness(Fuzziness.Auto)
                    .PrefixLength(2)
                    .Fuzziness(Fuzziness.Auto)
                    .Lenient()
                    .FuzzyRewrite(MultiTermQueryRewrite.TopTermsBlendedFreqs(10))
                    )

                .Match(b => b
                    .Field(f => f.ManufacturerName)
                    .Query(query)
                    .Fuzziness(Fuzziness.Auto)
                    .PrefixLength(2)
                    .Fuzziness(Fuzziness.Auto)
                    .Lenient()
                    .FuzzyRewrite(MultiTermQueryRewrite.TopTermsBlendedFreqs(10))
                    )

                .Match(c => c
                    .Field(f => f.MasterAttributes)
                    .Query(query)
                    .Fuzziness(Fuzziness.Auto)
                    .PrefixLength(2)
                    .Fuzziness(Fuzziness.Auto)
                    .Lenient()
                    .FuzzyRewrite(MultiTermQueryRewrite.TopTermsBlendedFreqs(10))
                    )
                )
            );
            Console.WriteLine(searchResponse.Hits.Count());

            foreach (var hit in searchResponse.Documents)

            {

                Console.WriteLine(hit.MasterProductId);

            }*/
    }
c# .net elasticsearch nest
1个回答
0
投票

@RussCam在上面的评论中回答了这个问题。重申一下,只将字符串作为参数传递给字段,而不是其他数据类型。 Camelcase也是必不可少的。

© www.soinside.com 2019 - 2024. All rights reserved.