我收集了很多这样的文件:
{
_id: ObjectId("879878g9fds87gsd8978f"),
text1: "this ball and this ball are toys in the house",
text2: "this is a car and a space boat",
text3: "this ball is a toys in the house this is a car and a space boat computer is a hammer",
keywordst3: ["ball", "toys", "house", "car", "boat", "computer", "hammer"],
}
我收到用户输入(搜索条件),我需要从集合中查找相关文档。在
当涉及到由2个以上单词组成的搜索条件时,我面临一个困难。在
以上述文件为例:
搜索条件:ball
第一路:
^{pr2}$这将使我的搜索与关键字列表相匹配,并正确返回文档。在
第二种方式:
keywords = 'ball'
collection.find({'$text': {'$search': keywords}}, {'score': {'$meta': "textScore"}})
这将返回一个带有相关“textScore”的文档光标。分数越高,文档与搜索条件的相关性就越高。在单词搜索的情况下,如果该词被多次找到,得分会更高。在
这个场景可以正常工作。但现在我面临的挑战是:
搜索条件:ball toys
第一路:
keywords = ['ball', 'toys']
collection.find({"keywordst3": {'$all': 'keywords'})
返回在keywordst3
中找到这两个关键字的文档。““坚硬”和条件。在
第二种方式:
keywords = 'ball toys'
collection.find({'$text': {'$search': keywords}}, {'score': {'$meta': "textScore"}})
事情变得很奇怪。。。我得到了一份有分数的文件列表,但我不能完全信任它们:
所以现在我很困惑如何为我的用户提供最好的搜索结果。在
我的想法是:
$all
匹配是一件好事,可以稳定地返回精确匹配。但是如果一个用户搜索两个彼此相关的词呢。例如:bernie sanders
。在我的文档集(这些实际上是新闻文章)中,有些文档只有bernie
。。。$all
将跳过这些。在$text
和{bernie sanders
,那么$text
和{textscore
进行排序。然而,如果搜索短语中的两个(或更多)单词彼此不相关:ball ship
-在上面的文档示例中,该文档的分数仍然很高,因为ball
被提到了两次,但是{我想解决这个问题的一个方法是同时使用这两种方法。在
$text
并获得一组文档(300…)按其分数降序排序。所以最高的比赛是在顶部。在迭代该集合,尝试将两个关键字与关键字列表匹配。在
如果我遗漏了什么,你能评估一下我的“疯狂”并开导我吗?对此,有什么更好的方法?在
目前没有回答
相关问题 更多 >
编程相关推荐