我正在使用Elasticsearch5.5.3,并且想在多个字段上搜索多个关键字,我正在使用第三方分析器elasticsearch-analysis-ik
我创建一个名为sudo service arangodb3 status
的索引,并在其中创建一个名为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
的文档。
如果错了,我应该如何进行搜索?