为什么搜索会忽略同义词?
Why search ignores synonyms?
我想搜索一个短语并获得所有结果(包括同义词结果)。
我的索引配置如下:
"settings": {
"index": {
"analysis": {
"filter": {
"my_graph_synonyms": {
"type": "synonym_graph",
"synonyms": [
"Cosmos, Universe",
]
}
},
"analyzer": {
"my_search_time_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"stemmer",
"my_graph_synonyms"
]
}
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "standard",
"search_analyzer": "my_search_time_analyzer"
}
}
}
我在索引中添加了 2 个文档:
PUT demo_idx/_doc/1
{
"content": "Cosmos A Spacetime Odyssey is a 2014 American science documentary television series."
}
PUT demo_idx/_doc/2
{
"content": "Universe A Spacetime Odyssey is a 2014 American science documentary television series."
}
我运行以下搜索:
"query": {
"bool": {
"must":
[{
"match": {
"content": {
"query": "Cosmos",
}
}
}]
}
}
我希望得到 2 个结果(在同义词之后)但我只得到一个。
如何 运行 搜索查询(同时使用同义词)并获得 2 个结果?
这是由于 stemmer
过滤器造成的,如果您删除它并再次为您的数据编制索引,它将 return 你们两个文件,
您可以使用 analyze API 检查分析器生成的标记,您可以看到 Cosmos
它生成以下标记
{
"tokens": [
{
"token": "univers", // Note this
"start_offset": 0,
"end_offset": 6,
"type": "SYNONYM",
"position": 0
},
{
"token": "cosmo",
"start_offset": 0,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 0
}
]
}
虽然在索引时使用的 standard
分词器会为 Universe
创建 Universe
而不会阻止它,因此它与 [=16= 生成的搜索词不匹配].
我想搜索一个短语并获得所有结果(包括同义词结果)。
我的索引配置如下:
"settings": {
"index": {
"analysis": {
"filter": {
"my_graph_synonyms": {
"type": "synonym_graph",
"synonyms": [
"Cosmos, Universe",
]
}
},
"analyzer": {
"my_search_time_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"stemmer",
"my_graph_synonyms"
]
}
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "standard",
"search_analyzer": "my_search_time_analyzer"
}
}
}
我在索引中添加了 2 个文档:
PUT demo_idx/_doc/1
{
"content": "Cosmos A Spacetime Odyssey is a 2014 American science documentary television series."
}
PUT demo_idx/_doc/2
{
"content": "Universe A Spacetime Odyssey is a 2014 American science documentary television series."
}
我运行以下搜索:
"query": {
"bool": {
"must":
[{
"match": {
"content": {
"query": "Cosmos",
}
}
}]
}
}
我希望得到 2 个结果(在同义词之后)但我只得到一个。
如何 运行 搜索查询(同时使用同义词)并获得 2 个结果?
这是由于 stemmer
过滤器造成的,如果您删除它并再次为您的数据编制索引,它将 return 你们两个文件,
您可以使用 analyze API 检查分析器生成的标记,您可以看到 Cosmos
它生成以下标记
{
"tokens": [
{
"token": "univers", // Note this
"start_offset": 0,
"end_offset": 6,
"type": "SYNONYM",
"position": 0
},
{
"token": "cosmo",
"start_offset": 0,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 0
}
]
}
虽然在索引时使用的 standard
分词器会为 Universe
创建 Universe
而不会阻止它,因此它与 [=16= 生成的搜索词不匹配].