2016-05-18 13 views
1

ich diese Art von groovy Skript:Elasticsearch: _score immer 0 für tf()

_index[field][term].tf() 

Ich Indizierung dieses groovy Skript

POST /_scripts/groovy/getTF 
{ 
    "script": "_index[field][term].tf()" 
} 

Dann die folgende Abfrage läuft immer wieder _score sein Null (Sense-Befehl)

POST /my_index/document/_search 
{ 
    "query": { 
    "function_score": { 
     "query": { 
     "match": { 
      "text": "algorithms" 
     } 
     }, 
     "functions": [ 
     { 
      "script_score": { 
      "script_id": "getTF", 
      "lang" : "groovy", 
      "params": { 
       "term": "algorithms", 
       "field": "text" 
      } 
      } 
     } 
     ], 
     "boost_mode": "replace" 
    } 
    }, 
    "size": 10, 
    "fields": ["text"] 
} 

Was mache ich hier falsch?

Dies ist die Abbildung für die Felder

PUT /ap_dataset/document/_mapping 
{ 
    "document": { 
    "properties": { 
     "docno": { 
     "type": "string", 
     "store": true, 
     "index": "not_analyzed" 
     }, 
     "text": { 
     "type": "string", 
     "store": true, 
     "index": "analyzed", 
     "term_vector": "with_positions_offsets_payloads", 
     "analyzer": "my_english" 
     } 
    } 
    } 
} 
+0

Können Sie den Inhalt des Felds 'text' eines der Dokumente teilen, die übereinstimmen? Auch das Mapping dieses Feldes? –

+0

@AndreiStefan Die Zuordnungen wurden hinzugefügt. Auch der 'Text' ist ein großer Absatz. Ich bin mir nicht sicher, ob ich es teilen möchte. Aber hat die Bedingungen, nach denen ich in der obigen Post suche –

+0

Sind Sie sicher, dass die Dokumente diesen Begriff in ihnen in diesem Feld haben? Wie hast du das überprüft? –

Antwort

0

Die Erklärung für die 0 Begriff Frequenz ist, dass der Begriff Sie suchen, ist nicht im Index gefunden. Ihr Skript erhält den Begriff algorithms (der Plural ist).

Aber der english Analyzer ändert Plural in Singular, als Folge der englischen Stemmer. Auch wenn Ihr Text algorithms enthält, lautet der Begriff im Index algorithm, der von _index['text']['algorithms'] nicht gefunden wird.

+0

Korrekt. Wenn ich nur nach einem Algorithmus suche. Ich bekomme die richtige Punktzahl. –

+0

Vielen Dank @AndreiStefan –

+0

Keine Sorge, das war lustig und verwirrend. Ich hielt es für selbstverständlich, dass ein Analysator keinen weiteren "Algorithmus" -Begriff ändern konnte. Nun, der 'englische' Analysator kann. –