0

在测试我的搜索引擎时,我意识到它不仅非常糟糕,而且对于用户可以输入的很多组合都不起作用。

我有一个搜索字段,用户可以在其中输入他想要的内容。一个地区、一个城市名称、一个邮政编码甚至一个国家或任何组合,没有预先确定的顺序,甚至没有预先确定的分隔符。

由于用户可以在该字段中输入大量可能的组合,因此很难找到与用户想要的城市相对应的城市。

更难的是,很多城市的名字里都有文章,或者用户可以输入或不能输入的组合名称、文章或单词。例如,由于我是法国人,我将使用名为:La Rochelle 的城市的示例。

用户已经可以仅使用城市名称搜索 La Rochelle、Rochelle 或 La-Rochelle。有了这个,如果他想更精确,他可以在之后或之前添加邮政编码,甚至是国家或两者......

我找不到任何关于如何从一些随机用户输入优化城市搜索的信息。有一些传统的方法可以做到这一点吗?

包含我的城市的表格如下:

CREATE TABLE cities (
id INT PRIMARY KEY,
article TEXT,           - contain the article if there's one, or NULL if not
city_name TEXT,         - the city name capitalized
article_upper TEXT,     - the article in upper case
city_name_upper TEXT,   - the city's name in upper-cases
city_slug TEXT,         - the combination of the article + space + city name all in caps
zipcode TEXT,           - the zip-code
country TEXT            - country where the city is located
);

我所做的是考虑空格或“,”,其中分隔符并将字符串拆分为几个单词,然后尝试将这些单词与不同的字段匹配。

除了带有文章或由多个单词组成的名称之外,这还不错,因为文章(或其他单词)被完全视为一个不同的领域。

知道强制用户输入或使用单独的字段对我的客户来说是不行的,该问题的解决方案是什么?

4

1 回答 1

1

这非常适合全文搜索... http://msdn.microsoft.com/en-us/library/ms142571.aspx

我要做的是创建一个汇总表,其中包含来自另一个表中所有列的连接字符串,并将我的全文索引放在上面。而且,不要在主表中使用 TEXT 数据类型,使用常规字符串 - varchar(8000) 或其他...

select id, article + ' ' + city_name  + ' ' + zipcode  + ' ' + country
into summary
from cities

(您不需要包含大写版本,每个单词只包含一个版本。)

于 2013-05-09T20:26:24.073 回答