2013-10-07 2 views
0

Je travaille sur un outil pour identifier des documents similaires et les marquer comme dupliqués. Pour ce faire, j'utilise ElasticSearch pour vérifier le contenu des documents afin qu'ElasticSearch prenne en charge la gestion des synomymes et des fautes de frappe possibles, mais je n'ai pas besoin de proposer une requête qui atteindrait mes objectifs.Score fixe Elasticsearch basé sur la similarité du contenu

Jusqu'à présent, je suis venu avec cette requête:

{ 
"query":{ 
    "filtered":{ 
     "query":{ 
      "more_like_this":{ 
      "fields":[ 
       "description" 
      ], 
      "like_text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.", 
      "min_term_freq":1, 
      "max_query_terms":999, 
      "min_doc_freq":1 
      } 
     } 
    } 
}, 
"from":0, 
"size":999, 
"search_type": "dfs_query_then_fetch", 
"sort":[ 
    { 
     "_score":{ 
      "order":"desc" 
     } 
    } 
] 
} 

Mais il semble que le score qu'il me donne est tout à fait au hasard, je voudrais avoir un score comme 100 pour les contenus complètement égaux tandis que 0 pour quelque chose c'est complètement différent.

Répondre

0

Je vois où vous allez, mais hors de la boîte, la notation ne va être pertinente pour cette requête particulière, car tout est basé sur les fréquences des termes et la position. le score est donc excellent pour les résultats de cette requête, mais sans signification de la requête à la requête. Donc, je voudrais simplement envelopper dans une requête de score constant.

Si vous ne voulez pas mettre chaque terme dans sa propre requête, je peux fournir un exemple de résolution possible avec plusieurs scores constants dans une requête booléenne dans une autre requête booléenne.

+0

Je me suis rendu compte que je changeais mon approche, au lieu d'utiliser l'elasticsearch pour calculer le similary, je l'utilisais pour trouver des textes similaires et calculais la similarité en utilisant ruby ​​lui-même. Merci pour votre temps. – darks

Questions connexes