Proximity Matching

近似匹配

使用TF/IDF的標(biāo)準(zhǔn)全文檢索是檢索字段中是否包含某些詞語(yǔ),而無(wú)法得知詞語(yǔ)之間的關(guān)系琉雳。
理解分詞之間的關(guān)系是一個(gè)復(fù)雜的難題划乖,我們無(wú)法通過(guò)換一種查詢方式去解決。但我們至少可以通過(guò)出現(xiàn)在彼此附近或者僅僅是彼此相鄰的分詞來(lái)判斷一些似乎相關(guān)的分詞昼捍。
短語(yǔ)匹配或者近似匹配木张。

短語(yǔ)匹配

保留那些包含全部搜索詞項(xiàng),且位置與搜索詞項(xiàng)相同的文檔

GET /my_index/my_type/_search
{
    "query": {
        "match_phrase": {
            "title": "quick brown fox"
        }
    }
}

也可以寫(xiě)成

"match": {
    "title": {
        "query": "quick brown fox",
        "type":  "phrase"
    }
}

詞項(xiàng)的位置

當(dāng)一個(gè)字符串被分詞后端三,不但會(huì)返回一個(gè)詞項(xiàng)列表舷礼,還會(huì)返回各詞在原始字符串中的 位置或者順序關(guān)系
被認(rèn)定和短語(yǔ)quick brown fox匹配的文檔,應(yīng)該滿足下列要求
1郊闯、三個(gè)詞項(xiàng)全部出現(xiàn)在域中
2妻献、brown位置比quick大1
3、fox位置比quick大2

GET /my_index/my_type/_search
{
    "query": {
        "match_phrase": {
            "title": {
                "query": "quick fox",
                "slop":  1
            }
        }
    }
}

slop參數(shù)使得查詢?cè)~條相隔多遠(yuǎn)時(shí)仍然被視為匹配团赁,上文查詢quick brown fox育拨,會(huì)被匹配

多值字段

由于es的索引方式導(dǎo)致多值字段的索引位置如下

PUT /my_index/groups/1
{
    "names": [ "John Abraham", "Lincoln Smith"]
}

會(huì)被索引成

Position 1: john
Position 2: abraham
Position 3: lincoln
Position 4: smith

于是查詢abraham lincoln就會(huì)被匹配到
解決方式,設(shè)置position_increment_gap欢摄,相當(dāng)于增加距離熬丧,這樣子就不容易被匹配到了

PUT /my_index/_mapping/groups (2)
{
    "properties": {
        "names": {
            "type":                "string",
            "position_increment_gap": 100
        }
    }
}

此時(shí)映射為

Position 1: john
Position 2: abraham
Position 103: lincoln
Position 104: smith

此時(shí)如果還想要被匹配,需要設(shè)置slop為100

越近越好

鄰近查詢怀挠,當(dāng)slop大于0的時(shí)候析蝴,會(huì)將鄰近度考慮到_score中

使用鄰近度提高相關(guān)度

GET /my_index/my_type/_search
{
  "query": {
    "bool": {
      "must": {
        "match": { (1)
          "title": {
            "query":                "quick brown fox",
            "minimum_should_match": "30%"
          }
        }
      },
      "should": {
        "match_phrase": { (2)
          "title": {
            "query": "quick brown fox",
            "slop":  50
          }
        }
      }
    }
  }
}

性能優(yōu)化

短語(yǔ)查詢和鄰近查詢都比簡(jiǎn)單的query查詢代價(jià)更高。
有效的方法時(shí)減少需要通過(guò)短語(yǔ)查詢檢查的文檔總數(shù)绿淋。
我們只想對(duì)頂部文檔重新排序闷畸,比如phrase查詢只是為了從每個(gè)分片中獲取前k個(gè)結(jié)果

GET /my_index/my_type/_search
{
    "query": {
        "match": {  (1)
            "title": {
                "query":                "quick brown fox",
                "minimum_should_match": "30%"
            }
        }
    },
    "rescore": {
        "window_size": 50, (2)
        "query": {         (3)
            "rescore_query": {
                "match_phrase": {
                    "title": {
                        "query": "quick brown fox",
                        "slop":  50
                    }
                }
            }
        }
    }
}

1、match查詢決定哪些文檔將包含在最終結(jié)果集中吞滞,并通過(guò)TF/IDF排序佑菩。
2盾沫、window_size是每一分片進(jìn)行重新評(píng)分的頂部文檔數(shù)量。
3殿漠、目前唯一支持的重新打分算法就是另一個(gè)查詢赴精。(舊)

需找相關(guān)詞

短語(yǔ)查詢和鄰近查詢的一個(gè)缺點(diǎn):過(guò)于嚴(yán)格。
即使使用了slop绞幌,得到的單詞順序的靈活性也需要付出代價(jià)蕾哟,失去了單詞對(duì)之間的聯(lián)系。
可以識(shí)別sue啊奄、alligator渐苏、ate相鄰出現(xiàn)的文檔,但無(wú)法分辨是Sue ate還是alligator ate菇夸。
索引單詞對(duì)琼富,能對(duì)這些單詞的上下文盡可能多的保留。
Sue ate the alligator
不僅將每一個(gè)單詞(或者unigram)作為詞項(xiàng)索引["sue", "ate", "the", "alligator"]
也將每個(gè)單詞以及它的鄰近詞作為單個(gè)詞項(xiàng)索引["sue ate", "ate the", "the alligator"]
這些單詞對(duì)(或者biggrams)被成為shingles.
shingles不限于單詞對(duì)庄新,也可以索引三個(gè)單詞(trigrams)
trigrams提供了更高的精度鞠眉,但是也大大增加了索引中唯一詞項(xiàng)的數(shù)量。
只有在用戶輸入的查詢內(nèi)容在原始文檔中順序相同時(shí)择诈,shingles才是有用的械蹋。
生成及使用shingles:https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/blob/cn/120_Proximity_Matching/35_Shingles.asciidoc
性能相關(guān):
shingles不僅比短語(yǔ)查詢更靈活,而且性能也更好羞芍。shingles查詢跟一個(gè)簡(jiǎn)單的match查詢一樣搞笑哗戈,而不用每次搜索花費(fèi)短語(yǔ)查詢的代價(jià)。索引時(shí)會(huì)付出一些小的代價(jià)荷科。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唯咬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子畏浆,更是在濱河造成了極大的恐慌胆胰,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刻获,死亡現(xiàn)場(chǎng)離奇詭異蜀涨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蝎毡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)厚柳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人顶掉,你說(shuō)我怎么就攤上這事草娜。” “怎么了痒筒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我簿透,道長(zhǎng)移袍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任老充,我火速辦了婚禮葡盗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啡浊。我一直安慰自己觅够,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布巷嚣。 她就那樣靜靜地躺著喘先,像睡著了一般。 火紅的嫁衣襯著肌膚如雪廷粒。 梳的紋絲不亂的頭發(fā)上窘拯,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音坝茎,去河邊找鬼涤姊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嗤放,可吹牛的內(nèi)容都是我干的思喊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼次酌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼恨课!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起和措,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤庄呈,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后派阱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體诬留,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年贫母,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了文兑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腺劣,死狀恐怖绿贞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情橘原,我是刑警寧澤籍铁,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布涡上,位于F島的核電站,受9級(jí)特大地震影響拒名,放射性物質(zhì)發(fā)生泄漏吩愧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一增显、第九天 我趴在偏房一處隱蔽的房頂上張望雁佳。 院中可真熱鬧,春花似錦同云、人聲如沸糖权。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)星澳。三九已至,卻和暖如春武契,著一層夾襖步出監(jiān)牢的瞬間募判,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工咒唆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留届垫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓全释,卻偏偏與公主長(zhǎng)得像装处,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浸船,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容