问题描述
我正在使用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 (将#修改为@)