gpt4 book ai didi

python - Elasticsearch-使用Python使用不同的分析器重新索引单个字段

转载 作者:行者123 更新时间:2023-12-03 02:28:42 25 4
gpt4 key购买 nike

我在elasticsearch中使用动态映射将json文件加载到elasticsearch中,如下所示:

es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

def extract():
f = open('tmdb.json')
if f:
return json.loads(f.read())

movieDict = extract()

def index(movieDict={}):

for id, body in movieDict.items():
es.index(index='tmdb', id=id, doc_type='movie', body=body)

index(movieDict)

如何更新单个字段的映射?我有要添加其他分析器的 title字段。
title_settings = {"properties" : { "title": {"type" : "text", "analyzer": "english"}}}
es.indices.put_mapping(index='tmdb', body=title_settings)

这失败了。

我知道我无法更新已经存在的索引,但是重新索引从json文件生成的映射的正确方法是什么?我的文件有很多字段,手动创建映射/设置会很麻烦。

我可以为查询指定分析器,如下所示:
query = {"query": {
"multi_match": {
"query": userSearch, "analyzer":"english", "fields": ['title^10', 'overview']}}}

如何为索引或字段指定它?

关闭和打开索引后,我还可以将分析器进行设置
analysis = {'settings': {'analysis': {'analyzer': 'english'}}}
es.indices.close(index='tmdb')
es.indices.put_settings(index='tmdb', body=analysis)
es.indices.open(index='tmdb')

复制英语分析仪的精确设置不会为我的数据“激活”它。

https://www.elastic.co/guide/en/elasticsearch/reference/7.6/analysis-lang-analyzer.html#english-analyzer

我说的“激活”不是以英语分析仪处理的形式返回搜索。仍然有停用词。

最佳答案

用大量谷歌搜索解决了...。

  • 您不能更改已建立索引的数据的分析器。这包括打开/关闭索引。您可以指定新索引,创建新映射并加载数据(最快捷的方式)
  • 为整个索引指定分析器不是一个好的解决方案,因为“英语”分析器特定于“文本”字段。最好按字段指定分析器。
  • 如果通过字段指定分析器,则还需要指定类型。
  • 您需要记住,在使用分析器可以在/或索引和搜索时间使用。引用Specifying analyzers

  • 码:
    def create_index(movieDict={}, mapping={}):
    es.indices.create(index='test_index', body=mapping)

    start = time.time()
    for id, body in movieDict.items():
    es.index(index='test_index', id=id, doc_type='movie', body=body)
    print("--- %s seconds ---" % (time.time() - start))

    现在,我从json文件的动态映射中获得了 mapping。我只是将其保存回json文件中,以便于处理(编辑)。那是因为我要绘制40多个字段,手工完成会很麻烦。
    mapping = es.indices.get_mapping(index='tmdb')
    这是如何指定 title键以使用 english分析器的示例
    'title': {'type': 'text', 'analyzer': 'english','fields': {'keyword': {'type': 'keyword', 'ignore_above': 256}}}

    关于python - Elasticsearch-使用Python使用不同的分析器重新索引单个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60479644/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com