我的查询在下面
L1 L2
L1 L2
转换为 L1 或 L2要求
L1 L2
(高权重)L1
和 L2
。我的模板在'query': '**L1* OR *L2**
下面需要更新
template = {
'from': 0,
'size': 10,
'aggs': {
'Tester': {
'terms': {
'field': 'Tester.name.keyword',
'order': {
'_key': 'desc'
}
}
},
'Developer': {
'terms': {
'field': 'Developer.name.keyword',
'order': {
'_key': 'desc'
}
}
},
'Analyst': {
'terms': {
'field': 'Analyst.name.keyword',
'order': {
'_key': 'desc'
}
}
}
},
'query': {
'bool': {
'must': {
'query_string': {
'query': '**L1* OR *L2**'
}
},
'filter': {
'term': {
'parentName.keyword': 'Software Department'
}
}
}
}
}
有没有办法在不改变设置的情况下实现
答案 0 :(得分:3)
正如@David 在评论中所建议的,您可以使用 shingles token filter 来实现您的用例。
添加一个工作示例,它清楚地显示了包含 L1 L2
的文档的更高分数,而 L1
和 L2
文档也出现在搜索结果中。 >
索引映射
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"shingle"
]
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
索引示例文档
{
"name" : "L1 L2"
}
{
"name" : "L1"
}
{
"name" : "L2"
}
搜索查询
{
"query": {
"match": {
"name": "L1 L2"
}
}
}
和搜索响应
"hits": [
{
"_index": "shingleside",
"_type": "_doc",
"_id": "1",
"_score": 1.0462961,
"_source": {
"name": "L1 L2"
}
},
{
"_index": "shingleside",
"_type": "_doc",
"_id": "2",
"_score": 0.5619608,
"_source": {
"name": "L1"
}
},
{
"_index": "shingleside",
"_type": "_doc",
"_id": "3",
"_score": 0.5619608,
"_source": {
"name": "L2"
}
}
]