當我搜索 'BCDE' 我想獲得以下所有的比賽:如何在aws cloudsearch中搜索確切的子字符串?
- '一個BCDE'
- 'BCDE F'
- 「一個BCDE f'
在AWS cloudsearch中實現此結果的方式是什麼(更喜歡巧妙地使用簡單的查詢解析器)?前綴不會給我第一個結果。有沒有其他方法?
當我搜索 'BCDE' 我想獲得以下所有的比賽:如何在aws cloudsearch中搜索確切的子字符串?
在AWS cloudsearch中實現此結果的方式是什麼(更喜歡巧妙地使用簡單的查詢解析器)?前綴不會給我第一個結果。有沒有其他方法?
如果您的索引字段的類型爲「text」,則簡單的結構化查詢將返回包含您的查詢字符串的所有匹配項。
例
查詢:(和part_part_number: '009')
結果:
1 _score 10.379914
part_part_number 009
2 _score 10.379914
part_part_number A-009-DY
3 _score 10.379914
part_part_number BY-009
在實施例和沒有成功幾個嘗試之後。我決定如下:
我創建了一個文本數組字段,並將它從部分字符串存儲回來,它的工作。
例如:我的字符串是「abcde」,我搜索bcde。這不會工作 但在我的領域文本字段將是以下字符串: e,de,cde,bcde,abcde。所以你會發現「abcde」,因爲他會在文本數組字段中找到這個詞。
哦,男人,但如果我搜索bcd這個術語不在文本數組字段。 只有字符串「bcde」以「bcd」開頭,所以它工作! =)
我的PHP文件中插入如下所示:
$term = "abcde";
$arrStr = str_split($term);
$arrTerms = [];
$aux = 1;
foreach($arrStr as $str){
$arrTerms[] = substr($term,($aux * -1));
$aux++;
}
$data = [
'type' => 'add',
'id'=> [your_id],
'fields' => [
'id'=> [your_id],
'field-text' => $term
'field-text-array' => $arrTerms
],
];
您可以使用前綴搜索和布爾「或」將它與'* bcde'搜索詞。你可以用'* bcde *'替換整個查詢,儘管我認爲這將不包括在開始或結束時包含bcde的匹配,所以你還需要包含'* bcde'和' bcde *'在你的查詢 – alexroussos
感謝你的幫助亞歷克斯。所以,我試圖在這裏遵循你的建議,但我可能會錯過一些東西。在aws控制檯的測試搜索工具中,我使用:Query Parser「Simple」和「Default Operator」或「。所以我輸入搜索詞: '* AHOO * AHOO AHOO *' ,我得到的結果,如: AHOO, AHOORA, [email protected] 但我沒有得到這樣的結果: FOO @ YAHOO.COM 我的第二個觀察結果是,如果我輸入: '* AHOO AHOO *' 這意味着'* AHOO *'對我的查詢沒有增加任何內容? 非常感謝,祝你有個美好的一年! –
如果您使用布爾運算符,我認爲您需要使用結構化查詢分析器。看看cloudsearch正在生成的url/querystring,並確保它是有道理的。如果使用結構化解析器沒有幫助,請隨時將該查詢字符串粘貼到此處,然後我會對其進行檢查 – alexroussos