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

如何解决搜索后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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?