我们有一个大型餐厅菜单数据库,用户可以在其中搜索菜单项。有许多项目,当这些单词并排时,它是一道独特的菜肴,但这些单词非常常见并且遍布整个地方。
示例:用户想要搜索“奶酪牛排” 在数据库中...它可以是“cheesesteak”或“cheese steak”
在我的同义词文件中,我有:
cheesesteak => cheesesteak, cheese steak
cheese steak => cheesesteak, cheese steak
当我搜索“cheesesteak”时,我得到了有效的结果。我得到的菜单项目有“奶酪牛排”和“奶酪牛排”(单词并排)
但是当我搜索“奶酪牛排”时,我会得到各种不相关的结果,例如“牛排沙拉配蓝纹奶酪”,它会用奶酪和牛排来挑选任何东西
有没有办法配置这个同义词文件,以便它有效?我不想强迫用户输入引号等。
答案 0 :(得分:1)
您正在寻找的是邻近搜索,通过正确的排序和单词距离来提高得分。来自Solr FAQ
可以使用草率短语查询来完成邻近搜索。越接近 这两个术语一起出现在文档中,得分越高 将会。一个草率的短语查询指定一个最大的“slop”,或者 需要移动令牌数量以获得匹配。
标准请求处理程序的此示例将查找所有文档 “蝙蝠侠”出现在“电影”的100个字内:
q = text:“蝙蝠侠电影”~100
答案 1 :(得分:0)
你应该做的是使用edismax并让boosting显示最相关的文档。如果您使用+cheese +steak ("cheesesteak"^100 "steak cheese"^50)