前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring认证中国教育管理中心-Apache Solr 的 Spring 数据教程四

Spring认证中国教育管理中心-Apache Solr 的 Spring 数据教程四

原创
作者头像
IT胶囊
发布2022-01-10 13:06:55
7760
发布2022-01-10 13:06:55
举报
文章被收录于专栏:IT技能应用

原标题:Spring认证中国教育管理中心-Apache Solr 的 Spring 数据教程四(Spring中国教育管理中心)

Apache Solr 的 Spring 数据教程四
Apache Solr 的 Spring 数据教程四

4.9.允许搜索的时间

您可以设置搜索完成的时间。此值仅适用于搜索,一般不适用于请求。时间以毫秒为单位。小于或等于零的值意味着没有时间限制。如果有的话,可能会返回部分结果。以下示例将搜索时间限制为 100 毫秒:

代码语言:javascript
复制
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查询的参数:

代码语言:javascript
复制
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:

代码语言:javascript
复制
@Query(requestHandler = "/instock")
Page<Product> findByNameOrDescription(String name, String description);

4.12使用联接

您可以使用通过定义一个Solr的核心内加入Join的属性Query。

在 Solr 4.x 之前加入不可用。

以下示例显示了如何使用联接:

代码语言:javascript
复制
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。 以下示例为查询中的所有字段设置突出显示:

代码语言:javascript
复制
SimpleHighlightQuery query = new SimpleHighlightQuery(new SimpleStringCriteria("name:with"));
query.setHighlightOptions(new HighlightOptions());
HighlightPage<Product> page = solrTemplate.queryForHighlightPage("collection-1", query, Product.class);

并非所有参数都可以通过 setter 和 getter 获得,但可以直接添加。

以下示例在两个字段上设置突出显示:

代码语言:javascript
复制
SimpleHighlightQuery query = new SimpleHighlightQuery(new SimpleStringCriteria("name:with"));
query.setHighlightOptions(new HighlightOptions().addHighlightParameter("hl.bs.country", "at"));

要将突出显示应用于派生查询,您可以使用@Highlight. 如果没有fields定义,突出显示应用于所有字段。

代码语言:javascript
复制
@Highlight(prefix = "<b>", postfix = "</b>")
HighlightPage<Product> findByName(String name, Pageable page);

4.14拼写检查

拼写检查根据实际查询提供搜索词建议。有关更多详细信息,请参阅Solr 参考。

4.14.1拼写检查选项

拼写检查查询参数在设置后添加到请求中SpellcheckOptions,如以下示例所示:

代码语言:javascript
复制
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水平。以下示例显示了如何使用它:

代码语言:javascript
复制
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 数据教程四
Apache Solr 的 Spring 数据教程四

以下示例使用QueryFunction:

代码语言:javascript
复制
SimpleQuery query = new SimpleQuery(new SimpleStringCriteria("text:ipod"));
query.addFilterQuery(new FilterQuery(Criteria.where(QueryFunction.query("name:sol*"))));

4.16实时获取

实时获取允许使用唯一键检索任何文档的最新版本,而无需重新打开搜索器。

以下示例显示了实时获取:

示例 64. 实时获取

代码语言:javascript
复制
Optional<Product> product = solrTemplate.getById("collection-1", "123", Product.class);

您可以通过提供 的集合来检索多个文档ids,如下所示:

示例 65. 实时多获取

代码语言:javascript
复制
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 字段的文档:

代码语言:javascript
复制
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注解:

代码语言:javascript
复制
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 数据教程四
Apache Solr 的 Spring 数据教程四

假设Book#typeisbook并且Review#type解析为review,可以通过更改查询参数来检索Book其子关系,如以下示例所示:reviewsfl

代码语言:javascript
复制
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);

父过滤器始终在索引中定义完整的父文档集,而不是单个文档的父文档集。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4.9.允许搜索的时间
  • 4.10。提高文档分数
  • 4.10.1索引时间提升
  • 4.11选择请求处理程序
  • 4.12使用联接
  • 4.13突出显示
  • 4.14拼写检查
  • 4.14.1拼写检查选项
  • 4.14.2.@Spellcheck
  • 4.15使用函数
  • 4.16实时获取
  • 4.17特殊领域
  • 4.17.1@Score
  • 4.18嵌套文档
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档