2016-09-19 5 views
0

Meine Elasticsearch gibt derzeit verschiedene Ergebnisse in verschiedenen Umgebungen, obwohl ich die gleiche Suche mache. Es funktioniert gut in der Entwicklung auf meinem lokalen Host, aber es funktioniert nicht auf meinem Testserver (gibt keine erwarteten Datensätze, ja ich habe die Datenbank gesetzt).Elasticsearch unterschiedliches Verhalten auf Testserver

Soweit ich verstehe, was dies tun sollte ist zu überprüfen, ob es einen Treffer auf einem der drei Übereinstimmungen findet, und ob es alle Treffer zurückgibt.

Ich verwende Windows 10, nur mit rails s.

Der Server läuft Ubuntu 16, mit Nginx und Einhorn.

Hier ist meine Abbildung: (Anmerkung: Ich bin mir nicht ganz sicher, ob der Analysator etwas tut, aber es sollte keine Rolle spielen)

settings index: { number_of_shards: 1 } do 
    mappings dynamic: 'true' do 
    indexes :reportdate, type: 'date' 
    indexes :client do 
     indexes :id 
     indexes :name, analyzer: 'dutch' 
    end 
    indexes :animal do 
     indexes :id 
     indexes :species, analyzer: 'dutch' 
     indexes :other_species, analyzer: 'dutch' 
     indexes :chip_code 
    end 
    indexes :locations do 
     indexes :id 
     indexes :street, analyzer: 'dutch' 
     indexes :city, analyzer: 'dutch' 
     indexes :postalcode 
    end 
    end 
end 

Hier ist meine Suche:

__elasticsearch__.search({ 
    sort: [ 
    { reportdate: { order: "desc" }}, 
    "_score" 
    ], 
    query: { 
    bool: { 
     should: [ 
     { multi_match: { 
      query: query, 
      type: "phrase_prefix", 
      fields: [ "other_species", "name"] 
     }}, 
     { prefix: { 
      chip_code: query 
     }}, 
     { match_phrase: { 
      "_all": { 
      query: query, 
      fuzziness: "AUTO" 
      } 
     }} 
     ] 
    } 
    } 
}) 

EDIT # 1 : Hinweis: Ich bin ziemlich neu in Sachen Ruby on Rails, habe vor ca. 2 Wochen damit begonnen, Wartungsarbeiten an einem alten Projekt durchzuführen und sie haben auch eine Suchfunktion angefordert.

+0

Nimmt Ihr Testserver dieselbe DB oder eine andere Datenbank ab, die als Ihr localhost gesetzt ist? Außerdem ändern Analysatoren die Art und Weise, wie ElasticSearch Dokumente indiziert und tokenisiert. Stellen Sie daher sicher, dass Sie dasselbe Setup zwischen den beiden Servern ausführen, oder die Ergebnisse variieren stark. – bkunzi01

+0

Sie sind verschiedene Datenbanken, sie sind jedoch identisch gesetzt. Wie auch immer, gerade herausgefunden, dass es wahrscheinlich Rails Caching-Dateien ist und aus irgendeinem Grund keine aktualisierten Dateien verwendet. Danke für den Kommentar oder so, ich werde diese Frage einfach löschen und eine weitere öffnen, um Verwirrung zu vermeiden. (plus es scheint nicht viel zu tun mit elasticsearch) –

+0

Nevermind, hatte andere Antworten mit der gleichen Prämisse durchgesehen, und es schien, Dateien zu cachen, aber behoben, und dieses Problem besteht immer noch. –

Antwort

0

Es stellte sich heraus, dass das Problem war, dass ich fremde Tabellen (naja, irgendwie) und verschachtelte Zuordnung (wahrscheinlich das) verwendete.

Hier ist der aktualisierte Code, der auf beide Produktion arbeitet und lokal:

__elasticsearch__.search({ 
    sort: [ 
    { reportdate: { order: "desc" }}, 
    "_score" 
    ], 
    query: { 
    bool: { 
     should: [ 
     { multi_match: { 
      query: query, 
      type: "phrase_prefix", 
      fields: [ "animal.other_species", "client.name"] 
     }}, 
     { prefix: { 
      "animal.chip_code": query 
     }}, 
     { match_phrase: { 
      "_all": { 
      query: query, 
      fuzziness: "AUTO" 
      } 
     }} 
     ] 
    } 
    } 
}) 

nicht sicher, warum es nicht braucht das Tier und Client Eltern preappended lokal zu arbeiten, während es sie Server auf meinem Test benötigt. Dies funktioniert jedoch auf diese Weise.

Verwandte Themen