2016-08-22 78 views
1

我是ELasticsearch的新手,需要您的幫助才能爲分析字段返回無與倫比的結果。 我有一個自定義的分析如下:Elasticsearch返回無與倫比的結果

"analyzer": { 
      "testing_analyzer": { 
       "type": "custom", 
       "char_filter": "html_strip", 
       "tokenizer": "standard", 
       "filter": [ 
        "lowercase", 
        "asciifolding", 
        "snowball", 
        "stop" 
       ] 
      }, 
      "testing_search_analyzer": { 
       "type": "custom", 
       "char_filter": "html_strip", 
       "tokenizer": "standard", 
       "filter": [ 
        "lowercase", 
        "asciifolding" 
       ] 
      } 
     } 

我有如下設置該分析儀場兩個指數&搜索。

"name": 
{ 
"type": "string", 
"analyzer": "testing_analyzer", 
"search_analyzer": "testing_search_analyzer" 
} 

但是當搜索名爲「博洛尼亞大學」,它返回第一個結果記錄有相同的匹配,但一些其他記錄不匹配(在結果低於第二記錄):

記錄1:

[ "Università di Bologna", "University of Bologna", "CNR", "Università di Pisa", "University of Pisa", "Mineraria e Delle Tecnologie Ambientali" ] 

RECORD2:

[ "University of Salerno", "Università di Salerno" ] 

查詢:

{ 
    "fields": [ 
     "doc_id", 
     "name" 
    ], 
    "query": { 
     "match": { 
     "name": "Università di bologna" 
     } 
    } 
} 

有什麼幫助嗎?

+0

如何定義'testing_search_analyzer'? – keety

+0

「testing_search_analyzer」: { 「類型」: 「定製」, 「char_filter」: 「html_strip」, 「標記生成器」: 「標準」, 「過濾器」:[ 「小寫」, 「asciifolding」] } , – Telebh

+0

你也可以顯示查詢嗎? – keety

回答

1

結果如預期。 默認情況下,匹配查詢會執行由tokenizer生成的令牌的「或」。

嘗試更改查詢如下:

{ 
    "fields": [ 
     "doc_id", 
     "name" 
    ], 
    "query": { 
     "match": { 
     "name": { 
      "query": "Università di bologna", 
      "operator": "and" 
     } 
     } 
    } 
} 
+0

它按照指示添加」和「運算符後工作!非常感謝。順便說一句,爲什麼不加入「和」運算符,一些沒有精確搜索詞的記錄得分高於完全匹配的記錄? – Telebh

+0

嘗試開啓[解釋](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html)它可能暗示爲什麼會發生這種情況 – keety

+0

如果答案是helpfu做upvote&接受謝謝:) – keety