共计 4312 个字符,预计需要花费 11 分钟才能阅读完成。
原题目:Spring 认证中国教育管理中心 -Apache Solr 的 Spring 数据教程四(Spring 中国教育管理中心)
Apache Solr 的 Spring 数据教程四
4.9. 容许搜寻的工夫
您能够设置搜寻实现的工夫。此值仅实用于搜寻,个别不适用于申请。工夫以毫秒为单位。小于或等于零的值意味着没有工夫限度。如果有的话,可能会返回局部后果。以下示例将搜寻工夫限度为 100 毫秒:
Query query = new SimpleQuery(new SimpleStringCriteria(“field_1:value_1”));
// Allowing maximum of 100ms for this search
query.setTimeAllowed(100);
4.10。进步文档分数
您能够进步匹配条件的文档分数以影响后果程序。您能够通过设置 boost onCriteria 或应用 @Boost 派生查问来做到这一点。以下示例晋升 name 了 findByNameOrDescription 查问的参数:
Page<Product> findByNameOrDescription(@Boost(2) String name, String description);
4.10.1 索引工夫晋升
基于文档和基于字段的索引工夫晋升已从 Apache Solr 7 中删除,因而从 Spring Data for Apache Solr 4.x 中删除。
4.11 抉择申请处理程序
您能够通过 qtParameter 间接在 Query 或增加 @Query 到您的办法签名中抉择申请处理程序。以下示例通过增加 @Query:
@Query(requestHandler = “/instock”)
Page<Product> findByNameOrDescription(String name, String description);
4.12 应用联接
您能够应用通过定义一个 Solr 的外围内退出 Join 的属性 Query。
在 Solr 4.x 之前退出不可用。
以下示例显示了如何应用联接:
SimpleQuery query = new SimpleQuery(new SimpleStringCriteria(“text:ipod”));
query.setJoin(Join.from(“manu_id_s”).to(“id”));
4.13 突出显示
要在搜寻后果中突出显示匹配项,您能够增加 HighlightOptions 到 SimpleHighlightQuery. 如果 HighlightOptions 不提供任何其余属性,则会在 SolrDocument.
您能够通过增加
FieldWithHighlightParameters 来设置特定于字段的突出显示参数 HighlightOptions。
以下示例为查问中的所有字段设置突出显示:
SimpleHighlightQuery query = new SimpleHighlightQuery(new SimpleStringCriteria(“name:with”));
query.setHighlightOptions(new HighlightOptions());
HighlightPage<Product> page = solrTemplate.queryForHighlightPage(“collection-1”, query, Product.class);
并非所有参数都能够通过 setter 和 getter 取得,但能够间接增加。
以下示例在两个字段上设置突出显示:
SimpleHighlightQuery query = new SimpleHighlightQuery(new SimpleStringCriteria(“name:with”));
query.setHighlightOptions(new HighlightOptions().addHighlightParameter(“hl.bs.country”, “at”));
要将突出显示利用于派生查问,您能够应用 @Highlight. 如果没有 fields 定义,突出显示利用于所有字段。
@Highlight(prefix = ““, postfix = ““)
HighlightPage<Product> findByName(String name, Pageable page);
4.14 拼写查看
拼写查看依据理论查问提供搜索词倡议。无关更多详细信息,请参阅 Solr 参考。
4.14.1 拼写查看选项
拼写查看查问参数在设置后增加到申请中 SpellcheckOptions,如以下示例所示:
SimpleQuery q = new SimpleQuery(“name:gren”);
q.setSpellcheckOptions(SpellcheckOptions.spellcheck()
.dictionaries(“dict1”, “dict2”)
.count(5)
.extendedResults());
q.setRequestHandler(“/spell”);
SpellcheckedPage<Product> found = template.query(q, Product.class);
通过设置启用拼写查看 SpellcheckOptions。设置 spellcheck=on 申请参数。
设置要用于查找的字典。
设置要返回的最大倡议数。
启用扩大后果,包含词频等。
设置申请处理程序,它必须可能解决倡议。
运行查问。
4.14.2.@Spellcheck
该 @Spellcheck 正文容许在拼写查看性能的应用 Repository 程度。以下示例显示了如何应用它:
public interface ProductRepository extends Repository<Product, String> {
@Query(requestHandler = “/spell”)
@Spellcheck(dictionaries = { “dict1”, “dic2”}, count=5, extendedResults = true)
SpellcheckedPage<Product> findByName(String name, Pageable page);
}
4.15 应用函数
Solr 反对查问中的多个函数表达式,并蕴含许多函数。您能够通过实现来增加自定义函数 Function。下表列出了反对的性能:
Apache Solr 的 Spring 数据教程四
以下示例应用 QueryFunction:
SimpleQuery query = new SimpleQuery(new SimpleStringCriteria(“text:ipod”));
query.addFilterQuery(new FilterQuery(Criteria.where(QueryFunction.query(“name:sol*”))));
4.16 实时获取
实时获取容许应用惟一键检索任何文档的最新版本,而无需从新关上搜索器。
以下示例显示了实时获取:
示例 64. 实时获取
Optional<Product> product = solrTemplate.getById(“collection-1”, “123”, Product.class);
您能够通过提供 的汇合来检索多个文档 ids,如下所示:
示例 65. 实时多获取
Collection<String> ids = Arrays.asList(“123”, “134”);
Collection<Product> products = solrTemplate.getByIds(“collection-1”, ids, Product.class);
4.17 非凡畛域
Solr 包含许多非凡字段,包含一个分数字段。
4.17.1@Score
为了加载查问后果的分数信息,能够增加一个带有 @Score 注解的字段,示意该属性保存文档的分数。
score 属性须要是数字的,并且每个文档只能呈现一次。
以下示例显示了一个带有 score 字段的文档:
public class MyEntity {
@Id
private String id;
@Score
private Float score;
// setters and getters ...
}
4.18 嵌套文档
嵌套文档容许在父子关系中的其余文档外部的文档。
嵌套文档须要与父文档一起索引,并且不能独自更新。然而,嵌套文档在索引中显示为单个文档。解析父子关系是在查问时实现的。
要批示属性应被视为嵌套对象,必须应用 @o.a.s.c.solrj.beans.Field(child=true)或进行正文 @
o.s.d.s.core.mapping.ChildDocument。上面应用 @ChildDocument 注解:
public class Book {
@Id String id;
@Indexed("type_s") String type;
@Indexed("title_t") String title;
@Indexed("author_s") String author;
@Indexed("publisher_s") String publisher;
@ChildDocument List<Review> reviews;
// setters and getters ...
}
public class Review {
@Id String id;
@Indexed("type_s") String type;
@Indexed("review_dt") Date date;
@Indexed("stars_i") int stars;
@Indexed("author_s") String author;
@Indexed("comment_t") String comment;
}
Apache Solr 的 Spring 数据教程四
假如 Book#typeisbook 并且 Review#type 解析为 review,能够通过更改查问参数来检索 Book 其子关系,如以下示例所示:reviewsfl
Query query = new SimpleQuery(where(“id”).is(“theWayOfKings”));
query.addProjectionOnField(new SimpleField(“*”));
query.addProjectionOnField(new SimpleField(“[child parentFilter=type_s:book]”));
return solrTemplate.queryForObject(“books”, query, Book.class);
父过滤器始终在索引中定义残缺的父文档集,而不是单个文档的父文档集。