1

J'ai crereated un index sur ElasticSearch même comme ci-dessous:ElasticSearch Ngram et postgresql trigrammes résultats de la recherche ne sont pas correspondent

"settings" : { 
    "number_of_shards": 1, 
    "number_of_replicas": 0, 
    "analysis": { 
       "filter": { 
        "trigrams_filter": { 
         "type":  "ngram", 
         "min_gram": 3, 
         "max_gram": 3 
        } 
       }, 
       "analyzer": { 
        "trigrams": { 
         "type":  "custom", 
         "tokenizer": "standard", 
         "filter": [ 
          "lowercase", 
          "trigrams_filter" 
         ] 
        } 
       } 
    } 
}, 
"mappings": { 
    "issue": { 
     "properties": { 
      "description": { 
       "type":  "string", 
       "analyzer": "trigrams" 
      } 
     } 
    } 
} 

Mes articles de test sont ci-dessous:

"alici onay verdi basarili satisiniz gerceklesti diyor ama hesabima para transferi gerceklesmemis" 

"otomatik onay işlemi gecikmiş" 

"************* nolu iade islemi urun kargoya verilmedi zamaninda iade islemlerinde urun erorr hata veriyor" 

J'ai tester cet index avec la requête ci-dessous:

GET issue/_search 
{ 
    "query": { 
     "match": { 
      "description":{ 
       "query": "otomatik onay istemi zamaninda gerceklesmemis" 
      } 
     } 
    } 
} 

Et résu lt:

{ 
     .... 
     "hits": { 
      .... 
       "max_score": 2.3507352, 
       "hits": [ 
          { 
           ....         
           "_score": 2.3507352, 
           "_source": { 
            "issue_id": "*******", 
            "description": "alici onay verdi basarili satisiniz gerceklesti diyor ama hesabima para transferi gerceklesmemis" 
              } 
          } 
         ] 
       } 
} 

Mais les mêmes données sur postgresql avec la réponse ci-dessous SQL un autre résultat:

SELECT 
    public.tbl_issue_descriptions_big.description, 
    similarity(description, 'otomatik onay islemi zamaninda gerceklesmemis') AS sml 
FROM 
    public.tbl_issue_descriptions_big 
WHERE 
    description %'otomatik onay islemi zamaninda gerceklesmemis' 
ORDER BY 
    sml DESC 
LIMIT 10 

Le résultat est:

description           | sml 
======================================================|====== 
otomatik onay islemi gecikmis       |0,351852 

Pourquoi cette différence a causé?

Répondre

0

Je ne sais pas assez sur postgres pour donner une réponse qualifiée là (car cela dépend aussi des documents qui sont indexés et si les formules de notation sont exactement les mêmes, ce dont je doute), mais Elasticsearch a un explain API et un dans la recherche, cela vous aide à découvrir pourquoi un certain document a été marqué de cette façon.

+0

Merci de votre réponse. Mais je pense que l'explication de postgresql equvalent est ts_vector et utilisée pour la recherche en texte intégral. Mais ngram et similitude en utilisant pour l'apprentissage automatique. Je recherche des algorithmes de similarité sur elasticsearch maintenant. –

+1

consultez la documentation lucene, comme https://lucene.apache.org/core/6_6_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html ou https://lucene.apache.org/core/ 6_6_0/core/org/apache/lucene/recherche/similitudes/BM25Similarity.html (qui est par défaut depuis ES 5.0 si vous créez un nouvel index) – alr