提问人:Sandy 提问时间:6/28/2022 最后编辑:Sandy 更新时间:6/30/2022 访问量:108
如何在Elasticsearch分析器中包含虚线词?
How to include dotted words in Elasticsearch analyzer?
问:
我正在使用此分析仪
"settings": {
"analysis": {
"char_filter": {
"my_char_filter": {
"type": "mapping",
"mappings": [
"- => _",
]
},
"quote_filter": {
"type": "mapping",
"mappings": [
"\\u0091=>\\u0020",
"\\u0092=>\\u0020",
]
}
},
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"my_char_filter", "quote_filter"
],
"filter": [
"lowercase",
]
}
}
}
}
在此映射中:
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_analyzer",
"term_vector": "with_positions_offsets",
},
"description": {
"type": "text",
"analyzer": "my_analyzer",
"term_vector": "with_positions_offsets",
"fielddata": True
},
}
}
一切都适用于简单的关键字。
所以,如果我使用这个查询
{
"query":
{
"bool":
{
"must":
[
{
"query_string":
{
"query": "\".net\" OR \".com\"",
"fields":
[
"title",
"description"
]
}
}
]
}
},
"highlight":
{
"pre_tags":
[
"<match>"
],
"post_tags":
[
"</match>"
],
"fields":
{
"title":
{
"type": "fvh",
"number_of_fragments": 0
},
"description":
{
"type": "fvh",
"number_of_fragments": 0
}
}
}
}
在以下描述中搜索“.com”“Google.com 是一家专注于人工智能、搜索引擎技术、在线广告、云计算和计算机软件的美国跨国科技公司 (COM)”,它只匹配“COM”(括号内)而不是“.com”。
我该如何解决这个问题?
编辑:我发现查询:
"query_string" : {
"query" : ".com OR .net OR Engine OR American" # by removing '\"'
"fields": ["title","description"],
}
部分工作,因为它机器“引擎”和“美国”,但我不知道是否匹配“.com”或“.net”(人眼显然可以),因为查询响应给了我:
matched_keywords: {'Engine', 'American', 'Google.com'}
那么,怎么能有这样的东西
matched_keywords: {'Engine', 'American', '*.com'}
?
答:
1赞
rabbitbr
6/29/2022
#1
这是因为您拥有的最接近的令牌是“google.com”,在您的情况下,通配符可以解决它,但您将失去性能。
{
"wildcard": {
"description": {
"value": "*.com"
}
}
}
评论
0赞
Sandy
6/30/2022
我不想使用通配符,因为我也使用确切的词,例如 google、yahoo 等。我的查询应该像“.com”或“Google”或“引擎”,但是此查询中的.com无法正常工作。
0赞
Sandy
6/30/2022
我更新了我的答案,考虑了一下
0赞
rabbitbr
6/30/2022
分析器正在删除“.”。运行 GET index_name/_analyzer 查看。生成的令牌是“google.com”,因此它不仅适用于“.com”。
评论