使用特定搜索关键字作为过滤器的策略

时间:2018-01-23 18:45:30

标签: elasticsearch

我正在使用Elasticsearch为我的食物菜单改进搜索功能。 Google Analytics(分析)显示,我们的用户经常在搜索栏中输入食物“类别”,例如sandwichsoup等。此外,人们正在键入gluten free等内容。

将这些“元”级搜索字词转换为过滤器而不是查询字词有哪些策略?

我有创建meta-terms索引的想法,并且其中的文档具有String属性,我可以使用该属性将该术语转换为Elasticsearch过滤器。例如,无谷蛋白可能具有类似的属性 "{"filter", "'filter': {'term': {'gluten-free': true}}"}

这样我就可以首先搜索元词条索引并解析出找到的所有过滤器并使用这些过滤器以及用户搜索词的其余部分来搜索菜单项索引。

是否有更多“Elaticsearchy”方法可以做到这一点?

谢谢!

(PS)抱歉......我想我不清楚...说用户搜索Seattle Sub,这是一个特定的菜单项。如果我只做menu_item/_search?q='Seattle Sub',三明治将成为热门歌曲之一。但是如果我做menu_item/_search?q='Sandwich',那么可能是最受欢迎的,因为它的描述我说的是“用烤奶酪三明治味道很棒”。所以@OshoNot是正确的,如果我在sandwich属性中搜索术语tags,所有返回的项目确实都是三明治 - 但是(这是我的问题的关键)我的代码怎么样?知道“搜索tags财产?如果我在Seattle Sub中搜索tags,我会得到0个结果。

换句话说 - 对于某些用户搜索查询,我想搜索tags字段,而对于某些用户,我想搜索name字段。如何根据用户的搜索查询定位正确的字段?

1 个答案:

答案 0 :(得分:0)

凯莉贝内特,

您可以使用数组数据类型字段来标记,并在其中插入任何类别:

PUT my_food_menu/my_type/1
{
  ....
  "tags":["gluten-free","lactose-free"]
  ....
}

然后您可以应用术语过滤器:

GET my_food_menu/my_type/_search
{
  "query":{
     "term":{
        "tags":"gluten-free"
     }
  }

霍杰帮助了