2010-03-30 44 views
1

我正在创建一个搜索页面,我们可以通过输入文本找到该产品。算法搜索页面

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

只要您完全定义术语'匹配',我们将能够引导您完整的解决方案。从你写的东西我可以假设它是某种函数返回排序值。 – Unreason 2010-03-30 08:47:33

回答

1

建立一个搜索引擎是一个非常复杂的工作,涉及模糊性,人类的语言,错别字,以及更多。您应该尝试使用随数据库引擎提供的任何内容。 SQL Server和SQLite开箱即用,大多数其他数据库可能具有类似的功能。这些引擎不是特别好,但它们应该足以应付简单的情况。对于更严肃的工作,请尝试使用Lucene,它针对不同的编程语言提供各种风格。

0

作为一个非常简单的解决方案,您可以使用sql的LIKE运算符。取而代之的

从table_name的地方参数选择OBJECT_NAME =东西

你会做

选择OBJECT_NAME从table_name的地方参数喜欢的东西

这可能会非常努力简单场景

+0

我正在做点什么。但我没有得到正确的顺序。 – Geeth 2010-03-30 06:01:44

+0

你可以使用ORDER BY - http://www.1keydata.com/sql/sqlorderby.html – Ankur 2010-03-30 06:19:55

+0

好吧,我明白你的意思。那么这是一个非常简单的解决方案。如果你想让它们有序,那么你需要定义一些“匹配性”的措施,让m是x和y匹配的程度。这并不简单,我不认为我可以通过这个文本框给你一个答案。如果你真的想要这个工作,你应该按照Marcelo推荐的方法研究Lucene – Ankur 2010-03-30 06:22:18

0

一些指针
- 试试你的RDBMS全文检索或调查解决方案,如Lucene的/ Solr
- 也有distance (Levenshtein)实现在SQL,不那么微不足道手工制作的排名
- n-grams (bigrams, trigrams)可以做很多,例如见postgres内部搜索相比mysql或MSSQL的所有选项

内部RDBMS搜索(postgres可能是一个例外)通常选项太少,实现你自己的通常太难了,或者RDBMS不会让你这么做(高效)。

0

在Java中,你有Lucene

也有在PHP的一个端口(Zend的Lucene的)。

你也有一个端口到C#Lucene .NET

只是通过改变你的数据库模型,你可以将它集成到搜索引擎。

看一看。我过去使用过Lucene,它一直非常有效。