搜索整个单词的一部分需要什么样的elasticsearch查询

时间:2017-11-02 09:12:00

标签: java scala elasticsearch elasticsearch-1.6.0

我在elasticsearch中有一份文件

  {"uuid":"eaa91372-d541-4b24-bdf4-3cb4902d2da1","artistName":"Amadeo Modigliani","Review":"abc","Origin":"pak","isNew":"false"}

我在我的代码中使用match query来获取文档,它会在提供所需的搜索值时返回正确的结果,例如:"Amadeo Modigliani",或"Amadeo""Modigliani" 但是当我通过"Amad"时,只有ES找不到该文件,请建议是否有任何其他查询将使用此scanerio执行搜索,或者是否有其他方法来执行此任务,谢谢

1 个答案:

答案 0 :(得分:0)

您实际上是在描述Elastic Search的部分匹配功能。 部分匹配允许指定用户正在查找的单词的一部分。它找到包含此部分的任何单词。

在您的情况下,最低匹配可以解决您的问题。它是匹配查询功能(minimum_should_match参数)附带的参数,可以根据您希望此功能的工作方式配置值。

以下是使用此参数的示例:

QueryBuilder qb = QueryBuilders
    .boolQuery()
    .must(termQuery("component", currentComponent))
    .should(termQuery("userId", currentUserId))
    .should(termQuery("customerId", currentCustomerId))
    .should(termQuery("currentRole", ADMIN))
    .minimumShouldMatch("2"); // or .minimumNumberShouldMatch(1)

您可以在下面找到有关此概念的相关信息。

Match Query
Minimum Should Match