0

示例 1:我的查询词是“abcd”。

我的查询结构是这样的:

    query: {
       query_string: {
          query: "abc",
          fields: ["field1", "field2", "field3"]
       }
    },
    size: 50,
    "highlight": {
    "fields": {
        "field1": {},
        "field2": {},
        "field3": {}
    }

它匹配以下实例:

abc abcs abc_def_ghi

但它与 def_abc 或 def_abc_ghi 不匹配。基本上是 abc 位于字符串中间的实例。

示例 2:在上面的同一个示例中,如果我的查询是 abc_def

尽管存在 abc_def,但它与 abc_def_ghi 不匹配。

我已经尝试过 prefix_phrase,它解决了场景 2,但错过了示例 1 的问题。

任何帮助,将不胜感激。

4

2 回答 2

0
  • 顾名思义phase_prefix,就像穷人自动完成一样,它会在您的情况下搜索以给定短语开头的字段 abc, abcs, abc_def_ghi. 由于您的字段不是以 开头abc,因此它不适用于短语前缀。def_abcdef_abc_ghi
  • 在分析您的字段时,尝试使用专门的字符过滤器模式替换字符过滤器来替换您的字段_中的(空格)。检查这个答案。所以你的令牌会导致 而不是像. 然后您可以在应满足您提到的所有案例的分析字段上使用cross_field搜索它。[def,abc,ghi][def_abc_ghi]
于 2018-10-06T17:20:50.823 回答
0

对于这些用法,您应该在查询或正则表达式中使用通配符

如果您使用术语查询,则可以改用通配符术语查询或正则表达式查询

于 2018-10-06T17:02:51.610 回答