【问题标题】:Elastic Search - Exact phrase search with wildcardsElastic Search - 使用通配符进行精确短语搜索
【发布时间】:2015-04-10 02:11:06
【问题描述】:

我正在寻求有关使用通配符进行精确短语搜索的帮助。

QueryBuilders.multiMatchQuery("Java Se", "title", "subtitle")
    .type(MatchQueryBuilder.Type.PHRASE_PREFIX);

以上查询,返回如下结果。

1) Java 搜索 2) 弹性 Java 搜索

尾随通配符有效。

但是,当我像下面的查询一样搜索时,

QueryBuilders.multiMatchQuery("ava Se", "title", "subtitle")
    .type(MatchQueryBuilder.Type.PHRASE_PREFIX);

它不会返回任何内容,因为没有任何内容与“ava Se”完全匹配。 我期待与上面相同的结果。

前导通配符不起作用。 有没有办法做到这一点?

谢谢, 巴斯卡尔.S

【问题讨论】:

    标签: elasticsearch spring-data spring-data-elasticsearch


    【解决方案1】:

    如果您查看“Type.PHRASE_PREFIX”的 javadoc,您会发现只有字符串中的最后一个词用作前缀,因此在您的情况下只有“Se”。

    我在我的索引中尝试了这个查询并且它有效: .setQuery(QueryBuilders.matchQuery("body", "(.*?)ing the").type(MatchQueryBuilder.Type.PHRASE_PREFIX))

    它返回的文档包含诸如“我们正在加强提案..”、“通过使用..”之类的短语

    【讨论】:

      【解决方案2】:

      您需要使用nGram 分析器,甚至edgeNGram 会是一个更好的主意。 完成此操作后,您的索引可能会有点繁重,但没有通配符的词缀搜索也能正常工作。

      【讨论】:

      • 在不使用 nGram 的情况下可以正常工作。 QueryBuilder queryBuilder = boolQuery().should( queryString("Mike Mat").analyzeWildcard(true) .field("firstName", 2.0f).field("lastName").field("title") .field("location ").field("industry").field("email"));
      • 另外,它适用于尾随通配符,但不适用于前导通配符。
      猜你喜欢
      • 2015-07-18
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      相关资源
      最近更新 更多