我正在创建一个搜索页面,我们可以通过输入文本找到该产品。
ex:带来了夜晚。
我的查询带来了包含至少单词的记录。
需求: 1.第一行应包含给定句子的记录。 2.第二行接下来最匹配。 3.第三行下一个匹配...等
如何实现这一目标。有没有任何算法。如果有人分享你的想法会更有帮助。
修改
示例搜索订单:
1. Brings on the night
2. Whoever Brings the Night
3. Night Baseball Brings
4. Night ride
5. Night Round
6. Brings flower
格塔
答案 0 :(得分:1)
构建搜索引擎是一项非常复杂的工作,涉及歧义,人类语言,拼写错误等等。您应该尝试使用数据库引擎附带的任何内容。 SQL Server和SQLite开箱即用,大多数其他数据库可能具有类似的功能。这些引擎并不是特别好,但它们应该足够简单的场景。对于更认真的工作,请尝试Lucene,它有各种不同的编程语言版本。
答案 1 :(得分:0)
作为一个非常简单的解决方案,您可以使用sql的LIKE运算符。而不是
从table_name中选择object_name,其中parameter = something
你会做
从table_name中选择object_name,其中参数LIKE
这可能适用于非常简单的场景
答案 2 :(得分:0)
答案 3 :(得分:0)
一些指针
- 尝试您的RDBMS全文搜索或调查Lucene / Solr之类的解决方案
- distance (Levenshtein)中有SQL的实现,因为不那么琐碎的手工排名
- n-grams (bigrams, trigrams)可以做很多事情,例如查看postgres内部搜索中与mysql或MSSQL相比的所有选项
内部RDBMS搜索(postgres可能是一个例外)通常选项太少,实现自己的选项通常太难,或者RDBMS不允许你这样做(有效)。
答案 4 :(得分:0)
在Java中,您有Lucene
在php(Zend Lucene)中还有一个端口。
您还有一个到C#Lucene .NET
的端口只需更改您的数据库模型,您就可以将其集成到搜索引擎中。
看一看。我过去使用过Lucene,它总是非常有效和高效。