部分和完整的短语匹配

时间:2016-09-11 22:24:12

标签: elasticsearch match keyword keyword-search

说我有句话:“约翰喜欢把他的宠物 lamb 带到他的 Lamborghini Huracan ,而不是他的 Lamborghini Gallardo ”我有一本包含“兰博基尼”,“兰博基尼盖拉多”和“兰博基尼Huracan”的字典。什么是提取大胆术语的好方法,实现术语“兰博基尼盖拉多”和“兰博基尼Huracan”作为短语匹配,以及其他部分匹配“兰博基尼”和“羔羊”?优先使用短语匹配单个关键字。

弹性搜索提供精确的术语匹配,匹配短语和部分匹配。确切的术语显然在这里不起作用,并且既不匹配短语,因为在这种情况下整个句子被认为是短语。如果我只在句子中使用了感兴趣的关键词,我认为部分匹配是合适的。通过以前的SO线程,我发现proximity for relevance看似相关,但不确定这是否是“最佳选择”,因为需要设置阈值。或者即使有比弹性搜索更简单/更好的替代方案(对于全文搜索而言似乎更多,而不是简单的关键字匹配到数据库)?

1 个答案:

答案 0 :(得分:4)

听起来您希望使用受控词汇(您的行业术语和词组词典)从您的文档中执行关键词提取

[上面用斜体字表示帮助您在SO和Google上找到相关答案]

这种级别的分析会使您从搜索堆栈中稍微进入自然语言处理堆栈。由于NLP往往是资源密集型的,因此它倾向于在索引时离线或在搜索应用程序的情况下进行。

要实现这一点,您需要:

  1. 关键短语提取工具集成到搜索索引代码中,以生成每个文档的已识别关键短语列表。
  2. 将这些关键短语作为shingles索引到新的Elasticsearch字段中。
  3. 在查询时搜索的字段列表中包含此带叠层的关键短语字段 - 最有可能提高分数。
  4. 要获得快速获胜工具来帮助您控制关键短语提取,请查看KEA(用java编写)。

    (你也可以写自己的,但如果你也希望提取不受控制的关键短语(不在字典中),训练有素的提取器会更好地为你服务。More tools here。)