繁体   English   中英

如何使用 spring-data 在 mongodb 中创建全文搜索查询?

[英]How to create full text search query in mongodb with spring-data?

我在 java 或 kotlin 上有 spring-data-mogodb 应用程序,需要通过 spring 模板创建对 mongodb 的文本搜索请求。

在 mongo shell 中,它看起来像这样:

  db.stores.find(
   { $text: { $search: "java coffee shop" } },
   { score: { $meta: "textScore" } }
  ).sort( { score: { $meta: "textScore" } } )

我已经尝试做一些事情,但这并不是我所需要的:

@override fun getSearchedFiles(searchQuery: String, pageNumber: Long, pageSize: Long, direction: Sort.Direction, sortColumn: String): MutableList<SystemFile> {

    val matching = TextCriteria.forDefaultLanguage().matching(searchQuery)


    val match = MatchOperation(matching)
    val sort = SortOperation(Sort(direction, sortColumn))
    val skip = SkipOperation((pageNumber * pageSize))
    val limit = LimitOperation(pageSize)

    val aggregation = Aggregation
            .newAggregation(match, skip, limit)
            .withOptions(Aggregation.newAggregationOptions().allowDiskUse(true).build())

    val mappedResults = template.aggregate(aggregation, "files", SystemFile::class.java).mappedResults


    return mappedResults
} 

可能有人已经在使用 java 在 mongodb 上进行文本搜索,请与我们分享您的知识)

设置文本索引

首先,您需要在要执行文本查询的字段上设置文本索引。

如果您使用 Spring data mongo 在数据库中插入文档,则可以使用@TextIndexed批注,并在插入文档时构建索引。

@Document
class MyObject{
  @TextIndexed(weight=3) String title;
  @TextIndexed String description;
}

如果您的文档已经插入到您的数据库中,您需要手动构建您的文本索引

TextIndexDefinition textIndex = new TextIndexDefinitionBuilder()
  .onField("title", 3)
  .onField("description")
  .build();

mongoTemplate 的构建和配置之后,您可以传递文本索引/

template.indexOps(MyObject.class).ensureIndex(textIndex);

构建文本查询

List<MyObject> getSearchedFiles(String textQuery){
  TextQuery textQuery = TextQuery.queryText(new TextCriteria().matchingAny(textQuery)).sortByScore();
  List<MyObject> result = mongoTemplate.find(textQuery, MyObject.class, "myCollection");
  return result
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM