看起来很简单,但我确信自己可能忽略了什么。我不知道如何在Lucene中实现以下内容:
问题
- 我正在搜索地名。
- 我有一个名为
Name
的字段。 - 它使用
Lucene.Net.Analysis.Standard.StandardAnalyzer
。 - 它是
TOKENIZED
的。 Name
的值在值中包含1个空格:halong bay
。- 搜索词可能会因文化上的不同拼写或真正的拼写错误而包含额外的空格。例如,
ha long bay
而不是halong bay
。 - 如果我使用术语
halong bay
,我可以找到匹配项。 - 如果我使用术语
ha long bay
,我无法找到匹配项。
尝试的解决方案
这是我使用LINQ to Lucene from Sitecore构建谓词的代码:
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);
我还尝试了使用.Like()
扩展进行模糊匹配:
var predicate = PredicateBuilder.Create<MySearchResultItemClass>(sri => sri.Like(term));
对于ha long bay
搜索词,这也没有产生任何结果。
如何在Sitecore中配置Lucene以返回halong bay
和ha long bay
搜索词的结果,最好不需要对输入词进行任何复杂处理(例如去除空格、添加通配符等)?
注意:我知道这也将允许h a l o n g b a y
这个词产生匹配结果,但我认为这并不是问题。