通配符查询不返回任何结果

时间:2019-09-02 15:10:59

标签: elasticsearch kibana

我正在尝试使用Elasticsearch使用通配符查询query_string
我的查询是:

GET my_index/_search
{
    "query": {
      "nested": {
        "path": "resources",
        "query": {
         "query_string": {
          "query": "resources.data:*gotomeeting.com*"
         }
        }
      }
    }
  }

即使我知道索引看起来像这样,查询也不会返回任何结果:

{
  'main_url': 'some_url',
  'resources': [
    {
      'actual_url': 'more_specific_url', 
      'data': 'general public.<a href="https://www3.gotomeeting.com/register/717380990" target="_blank">&#8220;FReSH:'
    },
    {
      'actual_url': 'other_url', 'data':'more_data'
    }
                ]
}

这是我的索引设置:

PUT my_index
{
  "settings": {
    "number_of_shards": 3,
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "char_filter": [
            "my_char_filter"
          ]
        }
      },
      "char_filter": {
        "my_char_filter": {
          "type": "html_strip"
        }
      }
    }
  },
  "mappings": {
    "_doc": {
      "_source": {
        "includes": [
          "main_url"
        ],
        "excludes": [
          "resources.data",
          "resources.actual_url"
        ]
      },
      "properties": {
        "main_url": {
          "type": "text", "norms": false,
          "analyzer": "standard"
        },
        "resources": {
          "type": "nested",
          "properties": {
            "actual_url": {
              "type": "text", "norms": false,
              "analyzer": "standard"
            },
            "data": {
              "type": "text", "norms": false,
              "analyzer": "my_analyzer"
            }
          }
        }
      }
    }
  }
}

我想知道在此过程中出了什么问题,以及如何使该查询返回结果。

2 个答案:

答案 0 :(得分:0)

您为什么不尝试使用Wildcard Query?它返回包含与通配符模式匹配的术语的文档。

我认为您的查询可能类似于:

GET my_index/_search
{
    "query": {
        "wildcard": {
            "resources.data": {
                "value": "*gotomeeting.com*",
                "boost": 1.0,
                "rewrite": "constant_score"
            }
        }
    }
}

我建议您也为此检查Rewrite documentation

希望这会有所帮助! :D

答案 1 :(得分:0)

如您所见,我在搜索URL之前有“ <\ a”。问题是html_strip剥离了“ <\ a”(标记定义超链接)之后提到的所有内容。
也就是说,html_strip逻辑的一部分显然是忽略了网址。
只需在escaped_tags

中添加“ a”,就可以解决此问题。

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-htmlstrip-charfilter.html