当前位置: 首页 > 知识库问答 >
问题:

弹性搜索1.4在搜索字符串中带有或运算符和连字符(-)的短语查询

舒俊雄
2023-03-14

因此,默认情况下,field1是通过使用默认分析器进行弹性搜索来分析的。

我在下面搜索短语查询,但它没有返回任何结果。

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "should": [
            {
              "query": {
                "multi_match": {
                  "query": "abc\\-xyz OR bcd\\-gyz",
                  "type": "phrase",
                  "fields": [
                    "field1"
                  ]
                }
              }
            }
          ]
        }
      }
    }
  }
}

因此弹性搜索短语查询不适合于OR运算符。知道为什么它不起作用吗?它是弹性搜索的一个限制,因为文本中有特殊的字符连字符(-)?

共有1个答案

淳于禄
2023-03-14

根据注释,使用与一起使用的查询字符串添加一个答案,但不能使用多个多匹配,因此必须使用查询字符串

使用相同的索引文档,添加在以前的答案,但与下面的搜索查询。

{
    "query": {
        "bool": {
            "must": [
                {
                    "query_string": {
                        "query": "\"abc-xyz\" OR \"bcd-gyz\"",
                        "fields": [
                            "title"
                        ]
                    }
                }
            ]
        }
    }
}

搜索结果

 "hits": [
            {
                "_index": "phrasemulti",
                "_type": "doc",
                "_id": "1",
                "_score": 0.05626005,
                "_source": {
                    "title": "bcd-gyz"
                }
            },
            {
                "_index": "phrasemulti",
                "_type": "doc",
                "_id": "2",
                "_score": 0.05626005,
                "_source": {
                    "title": "abc-xyz"
                }
            }
        ]

当您移除少量字符时,Phars查询将不起作用,或者当您将运算符更改为时,示例数据不会返回预期的搜索结果。

{
    "query": {
        "bool": {
            "must": [
                {
                    "query_string": {
                        "query": "\"abc-xyz\" OR \"bcd-gz\"",
                        "fields": [
                            "title"
                        ]
                    }
                }
            ]
        }
    }
}

仅返回一个搜索结果,因为示例数据中不存在短语bcd-gz

  "hits": [
            {
                "_index": "phrasemulti",
                "_type": "doc",
                "_id": "2",
                "_score": 0.05626005,
                "_source": {
                    "title": "abc-xyz"
                }
            }
        ]
 类似资料:
  • 由于已经有很多关于连字符的问题,我已经尝试了以下解决方案: 使用字符筛选器:ElasticSearch-在名称中使用连字符进行搜索。 所以我做了这个映射: 所以char筛选器似乎没有在搜索字符串上执行?我该怎么做才能让它起作用?

  • 我还没有为索引创建任何显式设置。谢了。

  • 我刚开始做弹性搜索。我想通过子字符串搜索,它由数字和像“/”和“-”这样的符号组成。例如,我使用默认设置和一个索引字段创建索引: 然后,我将一些数据添加到我的索引中: 不返回命中。如果我移除星形符号,那么作为回应,我会看到两个点击:“1/1-35”和“1/2-25”。如果我尝试用反斜杠(“1\/1*”)转义斜杠符号,结果分别是相同的。 当我的查询中有“-”符号时,那么我必须转义这个Lucene特殊

  • 实现此功能的推荐方法是什么?注意,我使用的是查询字符串查询。

  • 尝试使用通配符进入和弹性搜索精确短语搜索时遇到问题query_string。 希望能够返回结果,这将是所有变体的精确短语。i、 e.“库尔斯酿酒厂”、“库尔斯酿酒厂”、“库尔斯酿酒厂”等。 我不同意这种方法,但想搜索大部分文档以找到匹配的1或2个字段。

  • 我使用elasticsearch处理带有日期值的字符串字段的数据,如下所示: 我试图使用范围筛选器从日期到日期获取值。例如: 但是结果不包含的值 如果使用或,则结果中将包含的值。 我的查询有什么问题?