gpt4 book ai didi

c# - 带空格的 Sitecore Lucene 索引搜索词匹配不带空格的同一个词

转载 作者:太空狗 更新时间:2023-10-29 21:43:31 24 4
gpt4 key购买 nike

这看起来很简单,我确信我一定忽略了一些东西。我无法确定如何在 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 从 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 bayha long bay 搜索词的命中,理想情况下无需对输入项做任何花哨的事情(例如剥离空格、添加通配符等)?

注意:我知道这也会让术语 h a l o n g b a y 产生影响,但我认为我对此没有问题。

最佳答案

TOKENIZED 字段意味着字段值由标记(在这种情况下为空格)拆分,并将生成的术语添加到索引字典中。如果您在此类字段中索引“halong bay”,则会创建“halong”和“bay”术语。

对于“ha long”搜索查询,搜索引擎无法检索到此结果是正常的,因为它不知道包含“ha”或“long”字词的任何结果。

手动方法是在另一个名为 AlternateNames 的多值计算索引字段中定义所有其他写入地名的方法。然后您可以发出这种查询:Name==query OR AlternateNames==query

一种自动方法是在名为 CompactName 的单独计算索引字段中也为不带空格的地名编制索引。然后你可以发出这种查询:Name==query OR CompactName==compactedQueryWithoutSpaces

希望对你有帮助

杰夫

关于c# - 带空格的 Sitecore Lucene 索引搜索词匹配不带空格的同一个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39001887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com