2

我们有一个大型餐厅菜单数据库,用户可以在其中搜索菜单项。有很多项目,当这些词并排时,它是一道独特的菜,但这些词很常见,到处都是。

示例:用户想要在数据库中搜索“cheese steak”...可以是“cheesesteak”或“cheese steak”

在我的同义词文件中,我有:

cheesesteak     => cheesesteak, cheese steak
cheese steak    => cheesesteak, cheese steak

当我搜索“cheesesteak”时,我得到了有效的结果。我得到带有“cheesesteak”和“cheese steak”的菜单项(并排的单词)

但是当我搜索“cheese steak”时,我会得到各种不相关的结果,比如“steak salad with blue cheese”,它会找到任何带有奶酪和牛排的东西

有没有办法配置这个同义词文件以便它工作?我不想强迫用户输入引号等。

4

2 回答 2

1

您正在寻找的是邻近搜索,得分是否随着单词的正确排序和距离而提高。来自Solr 常见问题解答

可以使用草率的短语查询来完成邻近搜索。这两个词在文档中出现的越近,得分就越高。一个草率的短语查询指定了一个最大的“slop”,或者需要移动标记的位置数才能获得匹配。

这个标准请求处理程序的示例将查找在“电影”的 100 个单词内出现“蝙蝠侠”的所有文档:

q=text:"蝙蝠侠电影"~100

于 2012-06-27T16:04:49.070 回答
0

你应该做的是使用 edismax 并让 boosting 显示最相关的文档。如果您添加提升查询或带有所有术语的可选短语,您也可以使用标准处理程序来执行此操作,例如+cheese +steak ("cheesesteak"^100 "steak cheese"^50)

于 2012-06-27T16:10:44.903 回答