我正在尝试使用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">“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"
}
}
}
}
}
}
}
我想知道在此过程中出了什么问题,以及如何使该查询返回结果。
答案 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
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-htmlstrip-charfilter.html