2017-02-01 6 views
0

Я использую запрос solr для поиска ключевого слова из документов. Я хочу, чтобы точная фраза приходила на первое место, но я также хочу, чтобы одна и та же фраза повторялась много раз в документе, тогда ее следует считать одним, потому что те ключевые слова, имеющие одну и ту же фразу, несколько раз в документе, входящие в верхнюю часть, становятся высокими.solr exact search ignore duplicate phrase

См. Приведенный ниже результат. Я ищу «php developer», два результата, но оба имеют разные оценки.

В соответствии с нашей потребностью оба должны иметь одинаковый балл. Я хочу игнорировать повторяющуюся фразу, найденную в документах.

Пожалуйста, проверьте схему поданную также, поиск "job_search" поле сочетание "JOB_TITLE, key_skills, key_skills_admin, job_detail"

 <copyField source="job_title" dest="job_search"/> 
     <copyField source="key_skills" dest="job_search"/> 
     <copyField source="key_skills_admin" dest="job_search"/> 
     <copyField source="job_detail" dest="job_search"/> 

     { 
     "responseHeader":{ 
     "status":0, 
     "QTime":7, 
     "params":{ 
      "lowercaseOperators":"true", 
      "mm":"2", 
      "debugQuery":"true", 
      "fl":"job_slno,job_title,job_detail,key_skills,key_skills_admin,display_date,score", 
      "indent":"true", 
      "q":"\"php developer\"", 
      "stopwords":"true", 
      "wt":"json", 
      "defType":"edismax"}}, 
     "response":{"numFound":110,"start":0,"maxScore":2.518858,"docs":[ 
      { 
      "job_slno":"243681", 
      "job_title":"php developer", 
      "job_detail":"sdf sdfs df", 
      "key_skills":"php developer", 
      "key_skills_admin":"php developer", 
      "display_date":"2016-11-11T00:00:00Z", 
      "score":2.518858}, 
      { 
      "job_slno":"243340", 
      "job_title":"sfsdfs", 
      "job_detail":"dfsdfsdfsd", 
      "key_skills":"PHP Developer", 
      "key_skills_admin":"PHP Developer", 
      "display_date":"2016-11-13T00:00:00Z", 
      "score":2.399412}, 
      ] 
     } 

ответ

0

Вы можете создать свой собственный пользовательский класс схожести простирающейся DefaultSimilarity. И переопределить метод tf в соответствии с вашим прецедентом.

public class CustomSimilarity extends DefaultSimilarity { 

     //multiple occurrences of terms doesn't affect its relevancy 
     @Override 
     public float tf(float freq) { 
       return 1; 
     } 
} 
0

До тех пор, пока вы не зависят от положения маркеров (как вы не doign фразы Повышая или что-то подобное), you can set omitTermFreqAndPositions to true for the field.

Это позволит избежать хранения какой-либо информации о частоте термина и, по сути, сделать оценку идентичной, если только термин частота является единственным разным фактором.