gpt4 book ai didi

mongodb - 吗非亚/MongoDB : ordering search results from advanced queries

转载 作者:可可西里 更新时间:2023-11-01 10:01:34 25 4
gpt4 key购买 nike

我对 Morphia 还很陌生, MongoDB ,以及一般的面向文档的数据库。我正在寻找有关如何解决以下问题的一般指导。

我们有一个包含大约 500K Book 文档的数据库。

{ 
"isbn" : "0-691-01305-5",
"title" : "For Whom the Bell Tolls",
"titleFTS" : [
"bell",
"toll" ],
"author" : "Hemingway, Ernest",
"ratingsCount" : 138,
"rating" : "3.5",
"sales" : 10245
"price" : "12.95",
"category" : "fiction",
"description" : "The story of a young American in the International Brigades attached to a republican guerilla unit during the Spanish Civil War.",
"descriptionFTS" : [
"story",
"young",
"americ",
"internat",
"brigade",
"attach",
"republic",
"guerilla",
"unit",
"spanish",
"civil",
"war"]
}

我们需要对标题和描述字段执行全文搜索。为此,我创建了 titleFTSdescriptionFTS 数组,分别包含来自 titledescription 字段的单词,过滤停用词,然后进行词干提取。

搜索时,用户输入关键词,我们返回匹配所有输入词的图书,例如:

db.Book.find({ titleFTS : { $all: ['spanish', 'civil', 'war']}})
db.Book.find({ descriptionFTS : { $all: ['spanish', 'civil', 'war']}})

这工作正常,但现在我们来到了困难的部分:我们想根据多个条件对上述查询的结果进行排序。一种这样的建议顺序如下:

  1. titleFTSdescriptionFTS 字段中匹配搜索词的图书
  2. 仅在 titleFTS 字段中匹配的书籍
  3. 仅在 descriptionFTS 字段中匹配的书籍
  4. 销量最高的图书
  5. 具有最高评分的书籍
  6. ratingscount 最高的书

我们的应用程序是用 Java 编写的,并使用 MorphiaDB API。我可以想象如何编写 Java Comparator对于这种事情很容易,但显然我想在数据库级别进行排序。

这最终让我想到了一个问题:这可以使用 Morphia API 来完成吗?或者我是否需要深入研究使用 DB.command() 编写 Javascript?它需要 Map/Reduce 吗?如果是这样,关于如何针对此问题实现 map/reduce 的提示将大有帮助。

最佳答案

我现在强烈建议使用外部全文引擎,例如 Solr 或 ElasticSearch。MongoDB全文搜索相关的能力确实不适合对于真正的全文解决方案。您使用预词干等方法只是一种肮脏的解决方法。只要 MongoDB 不提供合适的全文集成,如果您对严肃且有效的解决方案感兴趣,就可以使用外部解决方案。

关于mongodb - 吗非亚/MongoDB : ordering search results from advanced queries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5045146/

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