Я использую Elasticsearch5.5.3 и хочу искать несколько ключевых слов по нескольким полям, я использую сторонний анализатор, который asticsearch-analysis-ik
Я создаю индекс с именемxiaomei
и создайте в нем тип с именем job
.
структура отображения выглядит следующим образом:
job_mapping = {
'properties': {
'id': {'type': 'integer', 'store': 'yes', 'index': False},
'job_id': {'type': 'integer', 'store': 'yes', 'index': False},
'title': {'type': 'text', 'store': 'yes', 'analyzer': 'ik_max_word'},
'title_alias': {'type': 'text', 'store': 'yes', 'analyzer': 'ik_max_word'},
'base_treatment_min': {'type': 'integer', 'store': 'yes', 'index': False},
'base_treatment_max': {'type': 'integer', 'store': 'yes', 'index': False},
'industry_title': {'type': 'text', 'store': 'yes', 'analyzer': 'ik_max_word'},
'c_title': {'type': 'text', 'store': 'yes', 'analyzer': 'ik_max_word'},
'm_name': {'type': 'text', 'store': 'yes', 'analyzer': 'ik_max_word'},
'm_full_name': {'type': 'text', 'store': 'yes', 'analyzer': 'ik_max_word'},
'c_title': {'type': 'text', 'store': 'yes', 'analyzer': 'ik_max_word'},
'm_province_id': {'type': 'integer', 'store': 'yes', 'index': False},
'm_city_id': {'type': 'integer', 'store': 'yes', 'index': False},
'm_area_id': {'type': 'integer', 'store': 'yes', 'index': False},
'm_tel': {'type': 'keyword', 'store': 'yes', 'index': False},
'm_location': {'type': 'geo_point'}
}
}
код поиска выглядит следующим образом:
query_body ={
'query': {
'multi_match': {
'query': '屈臣氏 张江',
'type': 'cross_fields',
'fields': ['title', 'title_alias', 'industry_title', 'c_title', 'm_name', 'm_full_name'],
'operator': 'or',
# 'analyzer':'ik_max_word'
}
}
}
result = es.search(index='xiaomei', doc_type='job', body=query_body, size=100)
но возвращаемый результат кажется неверным, результатЯ думаю, что это не должно возвращать это:
{'_id': 'AWkFIVMR-PH8ARDDPsHR',
'_index': 'xiaomei',
'_score': 4.7283645,
'_source': {'base_treatment_max': '3000',
'base_treatment_min': '2000',
'c_title': '金逸影城',
'id': 10441103,
'industry_title': '休闲娱乐',
'job_id': 10441103,
'm_area_id': '15405',
'm_city_id': 10174,
'm_full_name': '金逸珠江吴川国际影城',
'm_location': '0, 0',
'm_name': '金逸珠江吴川国际影城',
'm_province_id': 10013,
'm_tel': '0759-5933688',
'title': '服务员',
'title_alias': ''},
'_type': 'job'},
{'_id': 'AWkFIVIJ-PH8ARDDPsFU',
'_index': 'xiaomei',
'_score': 3.3853545,
'_source': {'base_treatment_max': '3000',
'base_treatment_min': '2000',
'c_title': '金逸影城',
'id': 10441103,
'industry_title': '休闲娱乐',
'job_id': 10441103,
'm_area_id': 0,
'm_city_id': 10162,
'm_full_name': '金逸影城(晋江宝龙城市广场店)',
'm_location': '24.80092, 118.56503',
'm_name': '晋江宝龙城市广场店',
'm_province_id': 10012,
'm_tel': '0595-82960055',
'title': '服务员',
'title_alias': ''},
'_type': 'job'},
действительно я хочу сделать поиск по ключевому слову 屈臣氏
в полях title
, title_alias
, industry_title
, c_title
, m_name
, m_full_name
и найдите ключевое слово 张江
в тех же полях, а затем получите все результаты.
Сначала я хочу узнать, подходит ли мой поисковый код для моих нужд.если это правильно, почему он возвращает документ, который не содержит ключевое слово 张江
.если это не так, как мне сделать поиск?