无法使用分析器在复合查询中进行搜索
not able to search in compounding query using analyzer
我有一个问题索引,它有多个字段,例如标签(逗号分隔的标签字符串)、作者、测试人员。我正在创建一个全局搜索,可以同时通过所有这些字段搜索问题。
我正在使用布尔查询
例如
{
"query": {
"bool": {
"must": [{
"match": {
"author": "author_username"
}
},
{
"match": {
"tester": "tester_username"
}
},
{
"match": {
"tags": "<tag1,tag2>"
}
}
]
}
}
}
没有分析器我可以得到结果,但它使用 space 作为分隔符,例如 python 3 被搜索为 python 或 3.
但我想搜索 Python 3 作为单个查询。因此,我为标签创建了一个分析器,这样每个逗号分隔的标签都被视为一个标签,而不是标准 whitespace.
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "pattern",
"pattern": ","
}
}
}
},
"mappings": {
"properties": {
"tags": {
"type": "text",
"analyzer": "my_analyzer",
"search_analyzer": "standard"
}
}
}
}
但现在我没有得到任何结果。请让我知道我在这里缺少什么。我无法在文档中的复合查询中找到分析器的使用:https://www.elastic.co/guide/en/elasticsearch/reference/current/compound-queries.html
添加示例:
{
"query": {
"bool": {
"must": [{
"match": {
"author": "test1"
}
},
{
"match": {
"tester": "test2"
}
},
{
"match": {
"tags": "test3, abc 4"
}
}
]
}
}
}
结果应匹配所有字段,但对于 tags 字段,应该有标签的并集,查询应以逗号分隔,而不是 space。即查询应匹配 test 和 abc 4 但上面的查询搜索测试、abc 和 4.
您需要从映射中删除 search_analyzer 或在匹配查询中传递 my_analyzer
GET tags/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"tags": {
"query": "python 3",
"analyzer": "my_analyzer" --> by default search analyzer is used
}
}
}
]
}
}
}
默认情况下,查询将使用字段映射中定义的分析器,但这可以用 search_analyzer 设置覆盖。
我有一个问题索引,它有多个字段,例如标签(逗号分隔的标签字符串)、作者、测试人员。我正在创建一个全局搜索,可以同时通过所有这些字段搜索问题。 我正在使用布尔查询 例如
{
"query": {
"bool": {
"must": [{
"match": {
"author": "author_username"
}
},
{
"match": {
"tester": "tester_username"
}
},
{
"match": {
"tags": "<tag1,tag2>"
}
}
]
}
}
}
没有分析器我可以得到结果,但它使用 space 作为分隔符,例如 python 3 被搜索为 python 或 3.
但我想搜索 Python 3 作为单个查询。因此,我为标签创建了一个分析器,这样每个逗号分隔的标签都被视为一个标签,而不是标准 whitespace.
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "pattern",
"pattern": ","
}
}
}
},
"mappings": {
"properties": {
"tags": {
"type": "text",
"analyzer": "my_analyzer",
"search_analyzer": "standard"
}
}
}
}
但现在我没有得到任何结果。请让我知道我在这里缺少什么。我无法在文档中的复合查询中找到分析器的使用:https://www.elastic.co/guide/en/elasticsearch/reference/current/compound-queries.html
添加示例:
{
"query": {
"bool": {
"must": [{
"match": {
"author": "test1"
}
},
{
"match": {
"tester": "test2"
}
},
{
"match": {
"tags": "test3, abc 4"
}
}
]
}
}
}
结果应匹配所有字段,但对于 tags 字段,应该有标签的并集,查询应以逗号分隔,而不是 space。即查询应匹配 test 和 abc 4 但上面的查询搜索测试、abc 和 4.
您需要从映射中删除 search_analyzer 或在匹配查询中传递 my_analyzer
GET tags/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"tags": {
"query": "python 3",
"analyzer": "my_analyzer" --> by default search analyzer is used
}
}
}
]
}
}
}
默认情况下,查询将使用字段映射中定义的分析器,但这可以用 search_analyzer 设置覆盖。