2017-04-06 102 views
0

這個問題處理了一個非常相似的主題,但我找不到我正在尋找的解決方案。 How to practially use a keywordanalyzer in azure-search?Azure搜索:如何獲取包含檢索詞的文檔

啓動狀態:

我創建了多個索引的資源。其中一個索引包含一個Collection(Edm.String)字段。 從這個領域,我只想獲得包含搜索詞的文檔。例如,該字段包含如下的文檔:「氣墊船零」,「氣墊船一」,「氣墊船二」。 如果搜索詞是「懸停」,則應返回所有三個文檔。如果搜索項是「craft zer」,則只應返回文檔「Hovercraft zero」。該文件不應該得到更高的分數,所需的行爲是我只得到「氣墊船零」文件作爲結果。

更多信息:

這是不可能的設置所述搜索到所有的(就像是在頂部的問題recomended),因爲我只想設置此行爲這一特定領域,而不是對所有searchqueries 。也不可能讓用戶的責任用引號輸入搜索詞。

我試過至今:

  • 使用關鍵字分析器就像是在這個問題上 上面描述:沒有成功
  • 使用帶有特定標記的過濾器的indexanalyzer(NGRAM, 小寫)和作爲關鍵字分析器的搜索分析器:不成功
  • 使用Charfilters來操縱搜索詞並手動設置第一個和最後一個位置(craft zer - >「craft zer」)上的 引號。 與上面問題中解釋的Yahnoosh一樣,查詢解析器 在應用分析器之前處理查詢字符串。所以: 沒有成功

有沒有解決這個問題的方法? 或者還有其他的方法來達到預期的行爲嗎?

希望有人可以提供幫助。

在此先感謝!

回答

0

使用你的例子有三個文件:「氣墊船零」,「氣墊船一個」,「氣墊船兩個」

  1. 問題一個prefix query查找包含術語以「哈弗」

    開始的所有文件

    搜索=哈弗*

  2. 要匹配的術語「工藝壽」,你需要使用的索引時間的關鍵字分析儀(或小寫令牌過濾關鍵字標記生成器),讓您的串的集合確保元素ñ沒有標記。然後在查詢時您可以發出regex query(注意正則表達式查詢比術語或前綴查詢慢得多)

    search = /。 工藝zer。/&查詢類型=全

另外,請使用Analyze API來測試您的自定義分析儀的配置。它將幫助您確保分析儀生成您期望的術語。

+0

很好的答案,謝謝。但我認爲我沒有詳細解釋我們的問題。我知道可以像這樣操縱搜索查詢,但遺憾的是,它不是我們的選擇。我們在用戶插入搜索詞的主頁上實施了一個搜索欄。然後我們通過API將這個術語傳遞給我們的資源來瀏覽我們的一個索引。因此不可能操縱每一個搜索查詢。我正在尋找一個解決方案,只有這個索引的一個領域被自動查詢所需的行爲。其他領域應該以其他方式查詢。 – maxhoefler

0

謝謝@Yahnoosh您的回答,我找到了一個適合我的解決方案。

簡短例子: 我有一個包含三個字段(field1,field2,field3)的索引。從field3我想要一個結果,其中文檔完全包含搜索詞。從field1和field2我想得到一個「標準」的結果。

解決方案: 我操縱SEARCHQUERY到 - >

FIELD1:{搜索關鍵詞} || field2:{searchterm} || field3:「{searchterm}」& queryType = full

使用此搜索查詢字段1和字段2以「標準」方式查詢,字段3用我正在搜索的行爲查詢。當然,有更高效和優雅的方式來解決這個問題,但它對我有用。

如果有人有更好的解決方案,讓我知道;)

+0

太棒了,這是一種常見的模式。我們剛剛發佈了一篇文章,解釋了Azure Search如何在後端工作:https://docs.microsoft.com/en-us/azure/search/search-lucene-query-architecture。它旨在幫助Azure搜索用戶瞭解如何自定義其搜索服務的行爲。 – Yahnoosh

相關問題