如何在弹性搜索中实现大小写和标点敏感,宽恕小写错误,模糊性?

时间:2018-08-11 14:15:48

标签: python-3.x elasticsearch flask elasticsearch-5 fuzzy-search

我正在使用弹性搜索搜索json文件。我插入了数据。现在,我想在DSL查询中纳入一些条件。我必须加入

1)基本的模糊性,例如大小写和标点不敏感,并且可以忽略前缀匹配中的轻微拼写错误

2)如果搜索文字包含3个以上的字符,我应该返回所有距离搜索文字最多2个编辑距离的搜索查询。

我正在执行第二个条件,并且在编写满足这两个条件的查询时遇到了困难。谁能说出如何编写查询?下面是到目前为止编写的代码

from flask import Flask, request
import json
import requests
import pprint
app = Flask(__name__)
__URL__ = "http://localhost:9200"
__HEAD__ = {'Content-Type': 'application/json'}


def query_data(query: str, fuzz=1):
    url = __URL__ + '/sample_data/_search'

    payload = json.dumps({
        'query': {
            'fuzzy': {
                'search_term': {
                    'value': query,
                    'fuzziness': fuzz,
                    # 'prefix_length': 3 // The number of initial characters which will not be “fuzzified”.
                    # // This helps to reduce the number of terms which must be examined. 
                }
            }
        },
      'sort': { 'search_term': { 'order': 'desc' } }
    })

    resp = requests.get(url=url, data=payload, headers=__HEAD__)

    return resp.json()

@app.route('/elasty')
def elasty():
    q=request.args.get('q')
    if len(q) > 3:
        result = query_data(q, 2)
    else:
        result = query_data(q)

    return json.dumps(result)

if __name__ == '__main__':
    app.run()

1 个答案:

答案 0 :(得分:0)

问题在于排序。
更改

'sort': { 'search_term': { 'order': 'desc' } }

'sort': { 'FieldLong': { 'order': 'desc',  "missing": "_last", "unmapped_type": "long" } }

我已经尝试过了,这行得通。