Algorithm 搜索查询标记器

Algorithm 搜索查询标记器,algorithm,tokenize,lexical-analysis,Algorithm,Tokenize,Lexical Analysis,我们正在尝试向我们的网站添加一个简单的搜索功能,该网站列出了餐馆。我们试图从搜索字符串中检测地名、位置和地点特征,比如“开罗附近的廉价餐馆”或“弗吉尼亚的中国和高端食品” 我们现在所做的是首先以最低的性能成本标记查询和搜索表(价格表(廉价-预算-昂贵-高端)比位置列表的表小)。这是正确的方法吗 -- 当做 Yehia看来您可能不知道拼写错误的查询是如何处理的。我认为您应该构建同义词集(例如,廉价、低预算等)并将每个标记从搜索字符串映射到其中一个组 顺便说一句,这里很容易处理拼写错误,因为这通常是

我们正在尝试向我们的网站添加一个简单的搜索功能,该网站列出了餐馆。我们试图从搜索字符串中检测地名、位置和地点特征,比如“开罗附近的廉价餐馆”或“弗吉尼亚的中国和高端食品”

我们现在所做的是首先以最低的性能成本标记查询和搜索表(价格表(廉价-预算-昂贵-高端)比位置列表的表小)。这是正确的方法吗

-- 当做
Yehia

看来您可能不知道拼写错误的查询是如何处理的。

我认为您应该构建同义词集(例如,廉价、低预算等)并将每个标记从搜索字符串映射到其中一个组

顺便说一句,这里很容易处理拼写错误,因为这通常是一个相当小的搜索空间。编辑距离,公共k-gram。。。一切都会好起来的

在下一步中,您应该为每个syn组构建反向索引列表,并将其映射到可与该属性关联的餐厅的排序列表。对于查询中的每个syngroup,获取所有这些列表并简单地将它们相交


无法映射到其中一个语法集的单词可能会被忽略,除非你有一些关于餐馆的全文,你也可以索引。在这种情况下,你也可以为“普通”单词建立这样的餐厅列表,并将它们交叉。但这已经非常接近于经典搜索引擎,使用ApacheLucence这样的技术可能是个好主意。如果没有全文,我认为你不需要这样的东西,因为SNYGroup的反向索引真的很容易自己处理。

关于长期计划和可伸缩性问题,我不确定这种方法能走多远。您是否考虑过使用行业标准的搜索引擎,如Solr()?