当前位置: 首页 > 面试题库 >

同义词分析器不起作用

武友樵
2023-03-14
问题内容

这是我的设置:

{
"countries": {
"aliases": {},
"mappings": {
  "country": {
    "properties": {
      "countryName": {
        "type": "string"
      }
    }
  }
},
"settings": {
  "index": {
    "creation_date": "1472140045116",
    "analysis": {
      "filter": {
        "synonym": {
          "ignore_case": "true",
          "type": "synonym",
          "synonyms_path": "synonym.txt"
        }
      },
      "analyzer": {
        "synonym": {
          "filter": [
            "synonym"
          ],
          "tokenizer": "whitespace"
        }
      }
    },
    "number_of_shards": "5",
    "number_of_replicas": "1",
    "uuid": "7-fKyD9aR2eG3BwUNdadXA",
    "version": {
      "created": "2030599"
    }
  }
},
"warmers": {}
}
}

我的synonym.txt文件在configelasticsearch文件夹内的文件夹中。

这是我的查询:

query: {
    query_string: {
        fields: ["countryName"],
        default_operator: "AND",
        query: searchInput,
        analyzer: "synonym"
        }
     }

中的字眼synonym.txt是:美国 ,美国,美国

所以这行不通。有趣的是,搜索正常,但当我在文件中输入任何单词时 除外synonym.txt。因此,例如,当我通常在搜索中键入 我们
的内容时,就会得到结果。有了这个分析仪, 我们 什么都不会给我。

我已经完成close并连接open到ES服务器,但仍然无法正常工作。

编辑

一个示例document

{
    "_index": "countries",
    "_type": "country",
    "_id": "57aabeb80057405968de152b",
    "_score": 1,
    "_source": {
      "countryName": "United States"
    }

的示例searchInput(这来自前端):

united states

编辑#2

这是我更新的索引配置文件:

{
"countries": {
    "aliases": {},
    "mappings": {},
    "settings": {
        "index": {
            "number_of_shards": "5",
            "creation_date": "1472219634083",
            "analysis": {
                "filter": {
                    "synonym": {
                        "ignore_case": "true",
                        "type": "synonym",
                        "synonyms_path": "synonym.txt"
                    }
                },
                "analyzer": {
                    "synonym": {
                        "filter": [
                            "synonym"
                        ],
                        "tokenizer": "whitespace"
                    }
                }
            },
            "country": {
                "properties": {
                    "countryName": {
                        "type": "string",
                        "analyzer": "synonym"
                    },
                    "number_of_replicas": "1",
                    "uuid": "50ZwpIVFTqeD_rJxlmd59Q",
                    "version": {
                        "created": "2030599"
                    }
                }
            },
            "warmers": {}
        }
    }
}
}

当我尝试添加文档并在所述文档上进行搜索时,synonym分析仪对我不起作用。

编辑#3

以下是索引中的2个文档:

{
"took": 3,
"timed_out": false,
"_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
},
"hits": {
    "total": 2,
    "max_score": 1,
    "hits": [{
        "_index": "stocks",
        "_type": "stock",
        "_id": "2",
        "_score": 1,
        "_source": {
            "countryName": "United States"
        }
    }, {
        "_index": "stocks",
        "_type": "stock",
        "_id": "1",
        "_score": 1,
        "_source": {
            "countryName": "Canada"
        }
    }]
}
}

问题答案:

您已经接近了,但是我建议您通读文档中的本节,以更好地了解此功能。

解决方案:

PUT /countries
{
  "mappings": {
    "country": {
      "properties": {
        "countryName": {
          "type": "string",
          "analyzer": "synonym"
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "filter": {
        "synonym": {
          "ignore_case": "true",
          "type": "synonym",
          "synonyms_path": "synonym.txt"
        }
      },
      "analyzer": {
        "synonym": {
          "filter": [
            "lowercase",
            "synonym"
          ],
          "tokenizer": "whitespace"
        }
      }
    }
  }
}

您需要删除索引,然后使用上面的映射再次创建索引。然后使用以下查询:

  "query": {
    "query_string": {
      "fields": [
        "countryName"
      ],
      "default_operator": "AND",
      "query": "united states"
    }
  }


 类似资料:
  • 问题内容: 编辑:要补充一点,同义词似乎可以与基本的查询字符串查询一起使用。 这将返回新罕布什尔州的所有结果,但对“ nh”的“匹配”查询将不返回结果。 我正在尝试将同义词添加到我的Elastic索引中的位置字段中,这样,如果我对“质量”,“马”或“马萨诸塞州”进行位置搜索,则每次都会得到相同的结果。我将同义词过滤器添加到设置中,并更改了位置映射。这是我的设置: 以及location.region

  • 问题内容: 我有一个现有的Elasticsearch索引,我想添加一个分析器,但是当我执行此命令时 我得到一个错误 {“错误”:“ IndexAlreadyExistsException [[nuxeo]已经存在]”,“状态”:400} 所以我必须在添加或刷新同义词文件之前删除索引不是很聪明。添加分析器的简单方法是吗?还是至少要刷新它?谢谢 问题答案: 您需要先关闭索引,更新分析器设置,然后再打开

  • 问题内容: 我的目标是搜索单词,而不考虑添加到其中的分析器。 我将 匹配 查询与 关键字分析器一起使用, 但我认为它可以与添加到该属性的默认分析器一起使用。 在elasticsearch中,我的作者文档结构像 索引映射: 在这里,我注意到我的标题分析器过滤器之一是 ngram 但是我在匹配查询中使用了 关键字分析器 ,以避免搜索过程中自动完成。 但是当我搜索时,上面的文件是匹配的。我期望的是组织具

  • 我想在网格视图中显示我的用户(带图像)我的jSON,在数组中给出正确的响应 但在解析Json后,数据不会显示在网格视图中 我的日志猫没有给我任何错误只是显示 这是我的活动 这是我的GridViewAdapter 这是我的日志 有人能解决我的问题吗?我想在GridView(UserImage)中显示这些响应 请先谢谢你 在代码中编辑后的新logcat。。。。根据Answer 06-05 13:23:

  • 我试图用_analyze API获得关键字标记的多字同义词。API对单字同义词返回预期结果,但对多字同义词不返回预期结果。以下是我的设置和分析链: 为什么analyze API不返回具有同义词类型的“foo bar”和“fooo bar”标记?

  • 问题内容: 我正在使用elasticsearch 1.1.2。 我在可搜索字段上使用具有不同权重的多重匹配查询。 例: {“ multi_match”:{“ query”:“这是一个测试”,“ fields”:[“ title ^ 3”,“ description ^ 2”,“ body”]}} 因此,在我的示例中,标题的重要性是正文的三倍。 我想根据找到的匹配项为每个字段自定义权重。 假设我搜索