我開始在我的 ReactJS 專案中使用 ElasticSearch,但我遇到了一些麻煩。
當我搜索時,我希望根據此表對我的結果進行排序
| 全力一擊 | 首發 | 子命中 | 模糊命中 | |
|---|---|---|---|---|
| 類別 | 1 | 3 | 5 | 10 |
| 商品名稱 | 2 | 4 | 6 | 11 |
| 官方名字 | 7 | 8 | 9 | 12 |
定義(我的看法,除非我錯了)是這樣的:
全力以赴
例子:
- “約翰”一詞對“約翰·多伊”有一個全面的打擊
- “John”一詞對“JohnDoe”沒有全面的影響
首發
例子:
- “John”一詞在“Johndoe”上開始流行
- “Doe”一詞在“JohnDoe”上沒有首發
子命中
例子:
- 術語“面包師”在“面包店”上有一個小熱門
- 術語“baker”對“de backer”沒有子點擊
模糊命中
根據我的理解,fuzzy-hit 是查詢詞有 1 個錯誤或缺少 1 個字母
例子:
- 術語“bakker”對“baker”有模糊影響
- 術語“bakker”對“bakers”沒有模糊影響
我發現我們可以像這樣提升欄位
fields = [
`category^3`,
`name^2`,
`official name^1`,
];
但這不是基于全擊、開始擊、子擊或模糊擊
這在帶有 Elasticsearch 的 ReactJS 中可行嗎?
uj5u.com熱心網友回復:
我需要了解你的問題。簡而言之
1.“如果在類別欄位中找到全命中,那么我們應該將其提升 1”。
- 如果在 official_name 欄位中找到完整命中,我們應該提升 7..
等等所有12種可能性?
如果這是您想要的,您將需要 12 個單獨的查詢,所有查詢都包含在一個巨大的 bool -> should 子句中。
我不會為你寫出查詢,但我會給你一些指示,關于如何構造查詢的 4 個子型別。
- 全命中
{
"term" : {"field" : "category/tradE_name/official_name", "value" : "the_search_term"}
}
- 首發
{
"match_phrase_prefix" : {"category/trade_name/official_name" : "the search term"}
}
- 子命中
{
"regexp" : {
"category/official/trade" : {"value" : "*term*"}
}
}
- 模糊
{
"fuzzy" : {
"category/trade/official" : {"value" : "term"}
}
}
你需要一個巨大的布爾
{
"query" : {
"bool" : {
"should" : [
// category field queries, 4 total clauses.
{
}
// official field queries, 4 clauses, to each clauses assign the boost as per your table. that's it.
]
}
}
}
對于每個子句,根據您的表格分配一個提升。而已。
HTH。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/498380.html
