- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有包含以下字段的 sitecore 页面/lucene 文档:
public static Expression<Func<T, bool>> GetSearchTermPredicate<T>(string searchTerm)
where T : ISearchableItem
{
var actualPhrasePredicate = PredicateBuilder.True<T>()
.Or(r => r.Title.Contains(searchTerm).Boost(2f))
.Or(r => r.FileName.Contains(searchTerm).Boost(1.5f))
.Or(r => r.Content.Contains(searchTerm))
.Or(r => r.DocumentContents.Contains(searchTerm));
var individualWordsPredicate = PredicateBuilder.False<T>();
foreach (var term in searchTerm.Split(' '))
{
individualWordsPredicate
= individualWordsPredicate.And(r =>
r.Title.Contains(term).Boost(2f)
|| r.FileName.Contains(term).Boost(1.5f)
|| r.Content.Contains(term)
|| r.DocumentContents.Contains(term));
}
return PredicateBuilder.Or(actualPhrasePredicate.Boost(2f),
individualWordsPredicate);
}
最佳答案
我设法让它与以下一起工作:
public static Expression<Func<T, bool>> GetSearchTermPredicate<T>(string searchTerm)
where T : ISearchableItem
{
var actualPhraseInTitlePredicate = PredicateBuilder.True<T>()
.And(r => r.Title.Contains(searchTerm));
var actualPhraseInFileNamePredicate = PredicateBuilder.True<T>()
.And(r => r.FileName.Contains(searchTerm));
var actualPhraseInContentPredicate = PredicateBuilder.True<T>()
.And(r => r.Content.Contains(searchTerm));
var actualPhraseInDocumentPredicate = PredicateBuilder.True<T>()
.And(r => r.DocumentContents.Contains(searchTerm));
var terms = searchTerm.Split(' ');
var titleContainsAllTermsPredicate = PredicateBuilder.True<T>();
foreach (var term in terms)
titleContainsAllTermsPredicate
= titleContainsAllTermsPredicate.And(r => r.Title.Contains(term).Boost(2f));
var fileNameAllTermsContains = PredicateBuilder.True<T>();
foreach (var term in terms)
fileNameAllTermsContains
= fileNameAllTermsContains.And(r => r.FileName.Contains(term));
var contentContainsAllTermsPredicate = PredicateBuilder.True<T>();
foreach (var term in terms)
contentContainsAllTermsPredicate
= contentContainsAllTermsPredicate.And(r => r.Content.Contains(term));
var documentContainsAllTermsPredicate = PredicateBuilder.True<T>();
foreach (var term in terms)
documentContainsAllTermsPredicate
= documentContainsAllTermsPredicate.And(r => r.DocumentContents.Contains(term));
var predicate = actualPhraseInTitlePredicate.Boost(3f)
.Or(actualPhraseInFileNamePredicate.Boost(2.5f))
.Or(actualPhraseInContentPredicate.Boost(2f))
.Or(actualPhraseInDocumentPredicate.Boost(1.5f))
.Or(titleContainsAllTermsPredicate.Boost(1.2f))
.Or(fileNameAllTermsContains.Boost(1.2f))
.Or(contentContainsAllTermsPredicate)
.Or(documentContainsAllTermsPredicate);
return predicate;
}
PredicateBuilder.Or(actualPhrasePredicate.Boost(2f), individualWordsPredicate)
似乎不包括谓词是 Or'd。当做 .ToString()
在结果连接谓词上,表达式不包含 individualWordsPredicate
的任何内容。 PredicateBuilder.False<T>()
为 individualWordsPredicate
.查看表达式时,它基本上是在生成 (False AND Field.Contains(keyword))
这当然永远不会评估为真。使用 .True<T>()
修复了这个。 关于lucene - Sitecore Search Predicate Builder 多关键字搜索与 boosting 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38261886/
以下各项之间是否存在明显的性能差异: something.Where(predicate).FirstOrDefault(); 和 something.FirstOrDefault(predicate
讨论来自 this answer让我好奇。哪个更快: someEnumerable.Single(predicate); 或 someEnumerable.Where(predicate).Singl
我知道这个问题是asked a lot by people甚至有人说 So, first(FirstOrDefault(predicate)) one is better in terms of pe
我一直在编写我的 LINQ 查询时使用 Where 子句中的谓词,后跟 FirstOrDefault 子句。我开始在 FirstOrDefault 子句中看到带有谓词的示例。 这个比那个好吗? EF
据我所知,在 Java 8 中引入谓词之前,Guava 中的谓词是为了填补 Java 中的空白而创建的。现在当 Java 中有这样的功能时,使用 Guava 谓词是否仍然有意义?这有什么附加值吗? 最
在 Java 中是否有某种标准方法来表达一个操作来测试一个 Predicate 是否比另一个 Predicate 更严格? 我可以想象类似 pred1.isStricterThan(pred2) 的东
在 Guava 中,Predicates 类有一种名为“or”或“and”的实用方法,您可以传递一个可迭代的或两个谓词。 我有一个如下代码示例: class AccountNamePredicate
检查 IEnumerable 集合是否多于或少于 X 个满足谓词的元素的最佳方法是什么? 我目前正在使用 .Count(lambda) limit。但是,如果您的列表是 ICollection,则
我正在做一些性能测试并注意到像这样的 LINQ 表达式 result = list.First(f => f.Id == i).Property 比慢 result = list.Where(f =>
标题说明了一切。如果我有一个字段 private Predicate myPredicate; 为什么我不能分配一个 Predicate 那个领域的实例? 最佳答案 因为 Predicate 实现逆
我没有找到恒等式 Predicate我预计在 com.google.common.base.Predicates所以我把它搞砸了。我发现它对于单元测试中关于集合的精确行为的断言很有用(例如 Multi
简介 今天在测试某些 LinQ 函数的性能差异时,我注意到 LastOrDefault(predicate) 几乎总是比 FirstOrDefault(predicate) 快,这让我有点吃惊感兴趣,
这是我的代码。 import java.util.stream.Stream; import java.util.List; import java.util.ArrayList; import ja
我有课SomeObject其中有一个功能Evaluate()返回一个 bool 值。如果我有一个 IList像这样: IList parameters; parameters.Add( objA );
我必须执行and()在我的实现 Predicate 的业务对象上. 出现问题的代码是 and() 行调用: Predicate predicate = new M
我有一个核心数据数据库,我正在尝试使用 block 谓词创建获取请求,但我收到未知谓词错误: NOTE: employeeToHouse is a property of type House tha
请帮助这个 Linq 新手! 我正在我的测试类中创建一个列表,我想使用 Moq 来检查结果。 我可以很容易地组合一个谓词来检查列表的结果。然后如何将该谓词变成表达式? var myList = new
Expression> predicate = null; var query2 = query.Join(partJoinTableRepository.GetPartJoinQuery(),
我正在尝试与流 api 一起使用的预定义身份过滤器。不幸的是,我无法正确返回符合 stream api documentation 的通用谓词。 . 根据这里的反编译器是 Stream::filter
你如何解释归纳谓词?它们是做什么用的?他们背后的理论是什么?它们仅存在于依赖类型系统中,还是也存在于其他系统中?它们在某种程度上与 GADT 相关吗?为什么它们在 Coq 中默认为 true? 这是
我是一名优秀的程序员,十分优秀!