有一段文字。有必要将其传递给 Sphinx,并以初始形式(词形还原)取回单词列表。理想情况下是一个单词列表,其中包含每个单词的出现次数(初始形式)。
如何实施?
有一段文字。有必要将其传递给 Sphinx,并以初始形式(词形还原)取回单词列表。理想情况下是一个单词列表,其中包含每个单词的出现次数(初始形式)。
如何实施?
我创建了一个索引:
index berni_filter2
{
rt_mem_limit = 512M
type = rt
path = /var/lib/sphinxsearch/data/berni_filter
rt_attr_uint = product_id
rt_attr_uint = store_id
rt_field = product_name
rt_attr_json = attributes
prefix_fields = product_name
expand_keywords = 1
min_infix_len = 2
dict = keywords
}
我正在尝试使用 SphinxQL 按名称查找产品:
SELECT product_id FROM berni_filter2 WHERE store_id = 0 AND MATCH ('@product_name mothercare')
该查询运行良好,但我还想搜索“mother”以查找包含“mothercare”的产品。试过:
SELECT product_id FROM berni_filter2 WHERE store_id = 0 AND MATCH ('@product_name mother')
SELECT product_id FROM berni_filter2 WHERE store_id = 0 AND MATCH ('@product_name mother*')
SELECT product_id FROM berni_filter2 WHERE store_id = 0 AND MATCH ('@product_name *mother*')
我还将 min_infix_len 更改为 min_prefix_len。什么都不管用。
Sphinx 能够根据一个句子中出现的单词进行搜索。比如有一段文字:
Vasya 做得很好,他吃了黄瓜,因为 饥饿的。就这样吧。
如果要求
молодец SENTENCE огурец
然后我们会找到这段文字。如果要求
молодец SENTENCE проголодался
然后我们就不会再找到这个文本了,因为显然在 Sphinx 中,分解成句子的实现是以一种简单的方式实现的,这里遇到的第一个点被认为是句子的结尾。因此问题。
在准备索引时,如何配置 Sphinx 使其具有更智能的句子分解?任何选项都可以——在配置中指定一些东西或插入一个外部包以将其分解成句子,例如,来自 Yandex 的 Tomita 解析器。
更新
有一个想法是使用 Tomit 解析器将其提前分解成句子,并告诉 Sphinx 使用换行符作为句子分隔符,但从 Sphinx 源码来看,这不太可能成功。