搜索后Elasticsearch Nest无法提供正确的响应

问题描述

我正在使用Elastic Search 7.8.2和nest 7.8.2。我已经成功创建了索引,并且能够将文档推入索引。我需要一些搜索方面的帮助,因为当我尝试搜索时,我没有得到所需的结果。

下面是索引的创建。

GROUP BY

Products.cs

          await searchClient.Indices.CreateAsync(index,c => c
              .Settings(s => s
                  .Analysis(a => a
                      //.AddSearchAnalyzer()
                      .Analyzers(an => an
                        .Custom("autocomplete",cu => cu
                            .Tokenizer("standard")
                            .Filters("lowercase","substring")
                        )
                        .Custom("autocomplete_search",cu =>
                            cu.Tokenizer("lowercase")
                            .Filters("lowercase","substring")
                        )
                        .Custom("synonymanalyzer",cu =>
                            cu.Tokenizer("standard").Filters("synonyms")
                        )
                    ).TokenFilters(tf => tf.Synonym("synonyms",sy => sy.Tokenizer("standard").SynonymsPath("synonym.txt")))
                    .Tokenizers(t => t
                        .EdgeNGram("autocomplete",e => e
                            .MinGram(2)
                            .MaxGram(50)
                            .TokenChars(TokenChar.Letter,TokenChar.Digit)
                        )
                    )
                  )
              )
          //.Map<T>(m => m.AutoMap()));
          .Map<Products>(m => m.AutoMap()))

示例JSON

        public class Products
        {
             public int ProductID {get;set;}
             [Text(Analyzer = SearchHelper.IndexAnalyzerName)]       
             public string Name { get; set; }
             [Keyword]        
             public string NameNotAnalyzed { get { return Name; } }
             [Text(Analyzer = SearchHelper.IndexAnalyzerName)]
             public string BrandName { get; set; }
             [Keyword]
             public string BrandNameNotAnalyzed
             {
               get { return BrandName; }
             }
        }

搜索查询

           {
             "ProductID": 1,"Name": "100poly Criss-Cross Tunic","NameNotAnalyzed": "100poly Criss-Cross Tunic","BrandName": "Rocky","BrandNameNotAnalyzed" : "Rocky"
           },{
             "ProductID": 2,"Name": "Men's 100% polyester Pant","NameNotAnalyzed": "Men's 100% polyester Pant",{
             "ProductID": 3,"Name": "Men's Black 100% polyester Pant","NameNotAnalyzed": "Men's Black 100% polyester Pant","BrandNameNotAnalyzed": "Rocky"
           }

现在,当我尝试执行搜索操作时,它没有提供所需的结果。喜欢 当我尝试搜索

           var searchQuery = default(QueryContainer);
            searchQuery = fuzzyText.GetSearchQuery();

          var fuzzySearchResult = elasticclient.Search<ProductView>(s => s
                .Index(ProductIndex)
                 .Query(f =>
                 {
                     return searchQuery;
                 })                
            );

            public static QueryContainer GetSearchQuery(this string searchText)
    {
        var keys = new string[] { "Name","Brand"};
       
        var queryContainer = default(QueryContainer);
        if (!string.IsNullOrEmpty(searchText))
        {
            string[] searchTerms = searchText.Split(' ');

            foreach (var key in keys)
            {
                var subQueryContainer = default(QueryContainer);
                foreach (var term in searchTerms)
                {
                    switch (key)
                    {
                        case "Name":
                            subQueryContainer |= Query<Products>.Match(b => b.Field(f => f.Name).Query(term).Boost(50));                               
                            
                            break;                            
                        case "Brand":
                            subQueryContainer |= Query<ProductView>.Match(b => b.Field(f => f.BrandName).Query(term).Boost(3));
                            break;
                        
                    }                        
                }
                queryContainer |= subQueryContainer;

            }
        }
        return queryContainer;
    }

应该在结果中给我2个和3个产品,当它返回零文档时以及我搜索

       "men" or "mens"

它应该退回我所有的三种产品,有人可以让我知道我哪里出了问题。非常感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...