elasticsearch在多个字段上搜索多个关键字

时间:2019-02-19 10:48:33

标签: elasticsearch

我正在使用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'}, 屈臣氏titletitle_aliasindustry_titlec_title并在相同字段中搜索关键字m_name,然后获得所有结果。

首先,我想知道我的搜索代码是否适合我的需求。 如果正确的话,为什么它返回不包含关键字m_full_name的文档。 如果错了,我应该如何进行搜索?

0 个答案:

没有答案