如何创建一个小型搜索引擎

4
我希望创建一个小型的应用内搜索引擎(类似于 Google 地图地址搜索栏)。需求很简单。该项由许多关键词组成,用户输入一个关键词,它会给出相应的结果,用户在此之后再输入另一个关键词,它会继续筛选结果。
我首先想到的是使用 mysql,创建一个关键词表来存储每个关键词,并将其与项目表相关联。当用户输入一个关键词时,它会通过关键词表中的每条记录进行搜索以给出结果。我这样想对吗?你们能给我一些帮助吗?我在 mysql 方面完全是个新手(只在高中课程中学过)。有没有开源平台可以实现这个功能?

到目前为止,你似乎采取了一个合理的方法。 你使用哪种语言/环境?你是想制作一个简单的基于Web的应用程序吗?结果表格将包含超链接URL/文本吗? - Matthew Slyman
这个问题与之前提出的问题类似。http://stackoverflow.com/questions/384276/how-do-i-create-a-search-engine-like-google - Display Word
1
使用 Jquerylike 在 mysql 中。 - Bugfixer
@Matthew Slyman 我正在尝试使用php+web服务,但不确定如何构建数据库结构。 - Tom Tian
3个回答

2
注意:如果您不需要存储关键字频率,则可以选择使用Marmik Bhatt的 LIKE 建议。
如果您有大量数据,并且只想进行关键字搜索(即您不会搜索短语或使用“near”等概念),则可以简单地创建一个关键字表。
CREATE TABLE address
(
  id INT(10) PRIMARY KEY,
  /* ... */
);

CREATE TABLE keyword
(
  word VARCHAR(255),
  address_id INT(10),
  frequency INT(10),
  PRIMARY KEY(word, article_id)
);

你需要扫描“索引”的文本并计算每个单词的出现次数。如果你想使用多个关键词:
SELECT address.*, SUM(frequency) frequency_sum
FROM address
INNER JOIN keyword ON keyword.address_id = address.id
WHERE keyword.word IN ('keyword1', 'keyword2', /*...*/)
GROUP BY address.id;

我进行了频率求和,这可能是一种比较结果有用性的简单方法,当给出许多结果时。

需要考虑的事情:

  • 您是否想将所有关键字都插入到数据库中,还是仅插入那些频率高于特定值的关键字?如果您插入所有关键字,那么您的表可能会变得非常庞大;如果您仅插入频率更高的关键字,则可能找不到只提到某个单词一次的文章。
  • 您是否想为特定文章插入所有可用的关键字,还是仅插入“前几个”?在这种情况下,频繁出现但对含义无贡献的单词将开始排挤其他单词。考虑单词“However”,它在您的文章中可能比“mysql”出现得更多,但后者才是定义文章的关键词。
  • 您是否想排除长度小于特定字符数的单词?
  • 您是否想排除已知的“无意义”单词?

你好,Volodya。我不是在寻找一篇文章,而是要检索一个项目。每个项目都有许多关键词,当用户输入一个关键词时,引擎会过滤一些结果,当用户输入另一个关键词时,它会从之前的结果中进行过滤,以此类推。 - Tom Tian
@TomTian 简单地将每个以下关键字添加到“IN”运算符的括号中即可。 - v010dya

1

对于搜索引擎,我使用“LIKE”来搜索参数... 查询看起来会像这样...

SELECT * FROM tbl_keywords
INNER JOIN tbl_addresses ON tbl_addresses.id = tbl_keyword.address_id
WHERE tbl_keywords.keywords LIKE "% $keyword %";

$keyword是从搜索栏的GET或POST请求中检索到的变量。

您还可以使用搜索结果的JSON输出,因此,使用jquery,您可以提供快速的搜索结果输出。

全文搜索

您还可以使用全文搜索来搜索地点和相关关键字,请参见此链接...SQL全文搜索教程


0

你可以实现的一件事是,根据空格拆分用户关键字,这将为您提供最相关的结果。

例如,用户输入创建搜索引擎

然后根据空格进行拆分。

然后查询每个单词的数据库。

REGEXP可能更有效,但您必须对其进行基准测试才能确定,例如。

SELECT * from fiberbox where field REGEXP 'Create|search|engine'; 

使用jQuery Autocomplete来制作一个像谷歌一样的自动建议搜索。

当用户输入第一个关键词“创建”时,引擎将给出相应的结果,但是我该如何为第二个关键词“搜索”以及第三个关键词等存储这些结果呢? - Tom Tian
还是这样的吗:当用户输入一些由空格分隔的关键词时,查询会自动一次性过滤与关键词匹配的项目?而不是逐个过滤? - Tom Tian
@TomTian,你误解了它...你不需要把它存储在任何地方...使用jquery-auto-complete...当按下并释放键时...到目前为止输入的字符串将被发送到服务器,并返回匹配的结果... - Umair Ayub
这是一个很好的教程,同一页上还有一个很好的演示。 http://www.pontikis.net/blog/jquery-ui-autocomplete-step-by-step#my-demo - Umair Ayub
这是创建它的网站链接:https://jqueryui.com/autocomplete/ - Umair Ayub
非常感谢。我可能需要重新学习查询语言,然后才能理解它们。 - Tom Tian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接