the*_*man 6 c# linq lucene sitecore
这看起来很简单,我确信我必须忽略一些东西.我无法确定如何在Lucene中执行以下操作:
Name
Lucene.Net.Analysis.Standard.StandardAnalyzer
TOKENIZED
Name
包含1个空格的值:halong bay
.ha long bay
代替halong bay
.halong bay
我会受到打击.ha long bay
我不会受到打击.这是我用来从Sitecore使用LINQ to Lucene构建我的谓词的代码:
var searchContext = ContentSearchManager.GetIndex("my_index").CreateSearchContext();
var term = "ha long bay";
var predicate = PredicateBuilder.Create<MySearchResultItemClass>(sri => sri.Name == term);
var results = searchContext.GetQueryable<MySearchResultItemClass>().Where(predicate);
Run Code Online (Sandbox Code Playgroud)
我还尝试使用.Like()
扩展模糊匹配:
var predicate = PredicateBuilder.Create<MySearchResultItemClass>(sri => sri.Like(term));
Run Code Online (Sandbox Code Playgroud)
这也没有结果ha long bay
.
如何在Sitecore中配置Lucene以返回两者halong bay
和ha long bay
搜索项的命中,理想情况下无需对输入项进行任何花哨的操作(例如,剥离空间,添加通配符等)?
注意:我认识到这也会让这个术语h a l o n g b a y
产生命中,但我不认为我有这个问题.
像这样的事情可能会起作用:
var predicate = PredicateBuilder.False<MySearchResultItemClass>();
foreach (var t in term.Split(' '))
{
var tempTerm = t;
predicate = predicate.Or(p => p.Name.Contains(tempTerm));
}
var results = searchContext.GetQueryable<MySearchResultItemClass>().Where(predicate);
Run Code Online (Sandbox Code Playgroud)
它确实分割了您的输入字符串,但我想这并不“花哨”;)
归档时间: |
|
查看次数: |
674 次 |
最近记录: |