首页 > 解决方案 > elasticsearch查询返回多于命中

问题描述

我下面的索引 python 文件
应该有 7 个匹配基于真实数据的查询,但它会不断产生 10 个结果。因为默认大小参数是 10 有没有办法让它产生与点击次数一样多的命中而不是大小?还是我必须预测大小并一直将其放入查询中?

结果:

{

也许与我如何索引它有关?idk 为什么点击总数是 26639。它应该像 7 一样匹配。

from elasticsearch import  helpers, Elasticsearch
from datetime import datetime
import csv
import json

es = Elasticsearch()

with open('result.csv', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    helpers.bulk(es, reader, index='hscate', doc_type='my-type')

res = es.search(index = 'hscate',
            doc_type = 'my-type',
           # size ='1000',
            #from_=0,
                body = {
                'query': {     
                    'match' : {
                         'name' : '추성훈의 코몽트 기모본딩바지 3+1종_총 4종'
                    }
                }
            })
print(len(res['hits']['hits']))
with open('mycsvfile.csv', 'w',encoding='utf-8',newline='') as f:  # Just use 'w' mode in 3.x
    header_present  = False
    for doc in res['hits']['hits']:
        my_dict = doc['_source'] 
        if not header_present:
            w = csv.DictWriter(f, my_dict.keys())
            w.writeheader()
            header_present = True
        w.writerow(my_dict)

标签: pythonelasticsearch

解决方案


正如您所怀疑的那样,我认为 elasticsearch 只会为您生成 10 个结果,这取决于它们在您的数据中匹配它们时产生的排名。

试试这个:

body = {
    'from': 0,
    'size': 1,
    'query': {
        'bool': {
            'must': [
                {
                    'match': {
                        'Category' : 'category name',
                    }
                },
                {
                    'match' : {
                        'name' : 'product name'
                    }
                }
            ]
        }
    }
}

来源:https ://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html


推荐阅读