亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何告訴 ElasticSearch 多匹配查詢我希望以字符串形式存儲的數值字段返回帶有數值字符

如何告訴 ElasticSearch 多匹配查詢我希望以字符串形式存儲的數值字段返回帶有數值字符

侃侃無極 2022-09-13 20:03:29
我正在編寫一個 Flask 應用程序,并且正在使用彈性搜索。這里是:search.pyfrom flask import current_appdef query_object(index, fields, query, page, per_page, fuzziness=0):    search = current_app.elasticsearch.search(        index=index,        body={'query': {'multi_match': {'query': str(query), 'fields': fields, 'fuzziness': fuzziness, 'lenient': True}},                'from': (page - 1) * per_page, 'size': per_page}    )    ids = [int(hit['_id']) for hit in search['hits']['hits']]    return ids, search['hits']['total']['value']以下模型已編制索引:class WishList(db.Model, SearchableMixin):    __searchable__ = ['first_name', 'gender', 'wants', 'needs', 'wear',    'read', 'shoe_size_category', 'shoe_type', 'sheet_size', 'additional_comments', 'time_chosen',    'age', 'shoe_sock_size', 'program_number']    id = db.Column(db.Integer, primary_key=True)    program_number = db.Column(db.String(4))    first_name = db.Column(db.String(20))    age = db.Column(db.String(10))    gender = db.Column(db.String(20))    wants = db.Column(db.String(300))    needs = db.Column(db.String(300))    wear = db.Column(db.String(300))    read = db.Column(db.String(300))    pant_dress_size = db.Column(db.String(20), default='unspecified')    shirt_blouse_size = db.Column(db.String(20), default='unspecified')    jacket_sweater_size = db.Column(db.String(20), default='unspecified')    shoe_sock_size = db.Column(db.String(20), default='unspecified')    shoe_size_category = db.Column(db.String(20), default='unspecified')當我當前搜索它時,所有字段都是可搜索的,并返回有效的結果,除非我使用數字值進行搜索。
查看完整描述

1 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

由于在數據類型上使用參數,然后使用true使其工作,如此鏈接中所述,因此發生了此問題。fuzzinessnumericlenientremoves format-based errors, such as providing a text query value for a numeric field, are ignored.


下面是您在嘗試在數值數據類型上使用時遇到的錯誤。fuzziness


原因“:”只能對關鍵字和文本字段使用模糊查詢 - 不能對類型為 [整數] 的 [age] 使用模糊查詢”


當您添加 時,上述錯誤會消失,但不會返回任何文檔。"lenient" : true


要使其正常工作,只需從搜索查詢中刪除和參數,它就可以工作,因為 Elasticsearch 會自動將有效轉換為有效值,反之亦然,如強制文章中所述。fuzzinesslenientstringnumeric


使用 REST API 顯示它的工作示例

指數定義

{

    "mappings": {

        "properties": {

            "age" :{

                "type" : "integer"

            }

        }

    }

}

索引示例文檔

{

  "age" : "25" --> note use of `""`, sending it as string

}


{

  "age" : 28 :- note sending numneric value

}

字符串格式的搜索查詢

{

    "query": {

        "bool": {

            "must": [

                {

                    "multi_match": {

                        "query": "28", --> note string format

                        "fields": [

                            "age" --> note you can add more fields

                        ]

                    }

                }

            ]

        }

    }

}

搜索結果

"hits": [

      {

        "_index": "so_numberic",

        "_type": "_doc",

        "_id": "1",

        "_score": 1.0,

        "_source": {

          "program_number": "123456789",

          "age": "28"

        }

      }

    ]

數字格式的搜索查詢

{

    "query": {

        "match" : { --> query on single field.

            "age" : {

                "query" : 28 --> note numeric format

            }

        }

    }

}

結果

"hits": [

      {

        "_index": "so_numberic",

        "_type": "_doc",

        "_id": "1",

        "_score": 1.0,

        "_source": {

          "program_number": "123456789",

          "age": "28"

        }

      }

    ]

如前所述,顯示您的 和 不會帶來任何結果。fuzzinesslenient


搜索查詢

{

    "query": {

        "match": {

            "age": {

                "query": 28,

                "fuzziness": 2,

                "lenient": true

            }

        }

    }

}

結果

{

    "took": 1,

    "timed_out": false,

    "_shards": {

        "total": 1,

        "successful": 1,

        "skipped": 0,

        "failed": 0

    },

    "hits": { --> note 0 results.

        "total": {

            "value": 0,

            "relation": "eq"

        },

        "max_score": null,

        "hits": []

    }

}


查看完整回答
反對 回復 2022-09-13
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號