我有一個收藏。檔案結構是,
{
model: {
name: 'string name'
}
}
我啟用了atlas 搜索,還為欄位創建了搜索索引。model.name搜索作業正常,但唯一的問題是無法獲得非常少的查詢字母的結果。
例子:
我有一個檔案,
{
model: {
name: "space1duplicate"
}
}
如果我查詢space,我無法得到結果。
{
index: 'search_index',
compound: {
must: [
{
text: {
query: 'space',
path: 'model.name'
}
}
]
}
}
但是如果我查詢space1duplica,它會回傳結果。
uj5u.com熱心網友回復:
在索引期間,全文搜索引擎通過將文本分成可搜索的塊來標記輸入。查看檔案中的相關部分。
默認情況下,Atlas Search 不會按數字拆分單詞,但如果您需要,請嘗試使用正則運算式標記器定義自定義分析器并將其用于您的欄位:
{
"mappings": {
"dynamic": false,
"fields": {
"name": [
{
"analyzer": "digitSplitter",
"type": "string"
}
]
}
},
"analyzers": [
{
"charFilters": [],
"name": "digitSplitter",
"tokenFilters": [],
"tokenizer": {
"pattern": "[0-9] ",
"type": "regexSplit"
}
}
]
}
另請注意,如果需要,您可以對字串欄位使用多個分析器。
uj5u.com熱心網友回復:
Atlas 搜索使用 Lucene 來完成這項作業。mongodb 站點上的檔案主要集中在將查詢傳遞給 Lucene 的 mongo 特定語法上,如果您不熟悉它的查詢語言,可能會有些混亂。
首先,有許多標記器和分析器可用,每個都有特定的用途。當您詢問有關地圖集搜索的問題時,您確實需要包含索引定義。
默認分詞器使用單詞分隔符來構建索引,然后洗掉結尾以存盤詞干,同樣取決于語言,默認情況下為英語。
因此,為了通過單詞的開頭找到“space1duplicate”,您可以使用帶有 nGram 標記的“自動完成”分析器。索引應按如下方式創建:
{
"mappings": {
"dynamic": false,
"fields": {
"name": {
"tokenization": "nGram",
"type": "autocomplete"
}
}
},
"storedSource": {
"include": [
"name"
]
}
}
一旦它被索引(您可能需要稍等一下,您有更大的資料集),您可以通過以下搜索找到該檔案:
{
index: 'search_index',
compound: {
must: [
{
autocomplete: {
query: 'spa',
path: 'name'
}
}
]
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/482852.html
下一篇:TaipyGUI中的地圖
