2016-12-20 31 views
2

當我搜索 'BCDE' 我想獲得以下所有的比賽:如何在aws cloudsearch中搜索確切的子字符串?

  • '一個BCDE'
  • 'BCDE F'
  • 「一個BCDE f'

在AWS cloudsearch中實現此結果的方式是什麼(更喜歡巧妙地使用簡單的查詢解析器)?前綴不會給我第一個結果。有沒有其他方法?

+0

您可以使用前綴搜索和布爾「或」將它與'* bcde'搜索詞。你可以用'* bcde *'替換整個查詢,儘管我認爲這將不包括在開始或結束時包含bcde的匹配,所以你還需要包含'* bcde'和' bcde *'在你的查詢 – alexroussos

+0

感謝你的幫助亞歷克斯。所以,我試圖在這裏遵循你的建議,但我可能會錯過一些東西。在aws控制檯的測試搜索工具中,我使用:Query Parser「Simple」和「Default Operator」或「。所以我輸入搜索詞: '* AHOO * AHOO AHOO *' ,我得到的結果,如: AHO​​O, AHO​​ORA, [email protected] 但我沒有得到這樣的結果: FOO @ YAHOO.COM 我的第二個觀察結果是,如果我輸入: '* AHOO AHOO *' 這意味着'* AHOO *'對我的查詢沒有增加任何內容? 非常感謝,祝你有個美好的一年! –

+0

如果您使用布爾運算符,我認爲您需要使用結構化查詢分析器。看看cloudsearch正在生成的url/querystring,並確保它是有道理的。如果使用結構化解析器沒有幫助,請隨時將該查詢字符串粘貼到此處,然後我會對其進行檢查 – alexroussos

回答

0

如果您的索引字段的類型爲「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 
0

在實施例和沒有成功幾個嘗試之後。我決定如下:

我創建了一個文本數組字段,並將它從部分字符串存儲回來,它的工作。

例如:我的字符串是「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 

    ], 
];