Evernoetの不具合。ノートの更新情報が検索結果に反映されるのが遅い。

不具合の現象

  1. 新規ノートA(ノートタイトル「HOGEHOGE」)を作成する。

  2. 1で作成したノートを検索する。「intitle:HOGEHOGE」で検索を実行する。

  • 1と2の間が短い場合、ノートAが検索結果に含まれない。
  • 1と2の間が**十分に長い(30秒以上)**場合、ノートAが検索結果に含まれる。
  • どちらの場合でも、検索結果についてくる、updateCountの値は、ノートA作成後の値になっている。

動作確認用テストコード

    static public void testEvernote(Context context, String CONSUMER_KEY, String CONSUMER_SECRET, Boolean debug) {
        EvernoteSession evernoteSession;
        EvernoteSession.EvernoteService EVERNOTE_SERVICE;

        LOG.d("MAKE EvernoteSession");
        EVERNOTE_SERVICE = EvernoteSession.EvernoteService.PRODUCTION;
        evernoteSession = new EvernoteSession.Builder(context)
                .setEvernoteService(EVERNOTE_SERVICE)
                .setSupportAppLinkedNotebooks(SUPPORT_APP_LINKED_NOTEBOOKS)
                .build(CONSUMER_KEY, CONSUMER_SECRET)
                .asSingleton();

        LOG.d("isLoggedIn:" + evernoteSession.isLoggedIn());

        LOG.d("GET NoteStore");
        EvernoteNoteStoreClient noteStoreClient = evernoteSession.getEvernoteClientFactory().getNoteStoreClient();

        try {
            LOG.d("UpdateCount:" + noteStoreClient.getSyncState().getUpdateCount());

            LOG.d("GET Default Notebook");
            Notebook defaultNotebook =  noteStoreClient.getDefaultNotebook();

            LOG.d("Create New Note");
            String noteName = "HOGEHOGE";
            Note newNote = new Note();
            newNote.setTitle(noteName);
            newNote.setContent(EvernoteUtil.NOTE_PREFIX + EvernoteUtil.NOTE_SUFFIX);
            newNote.setNotebookGuid(defaultNotebook.getGuid());
            Note createdNote = noteStoreClient.createNote(newNote);

            LOG.d("UpdateCount:" + noteStoreClient.getSyncState().getUpdateCount());

            String serchWords = "intitle:\"" + noteName + "\"";
            NoteFilter filter = new NoteFilter();
            filter.setWords(serchWords);
            filter.setNotebookGuid(defaultNotebook.getGuid());
            filter.setOrder(NoteSortOrder.UPDATED.getValue());
            filter.setAscending(false);

            NotesMetadataResultSpec spec = new NotesMetadataResultSpec();
            spec.setIncludeTitle(true);     //  ノートタイトルを取得する
            spec.setIncludeCreated(true);   //  作成日時を含む

            int offset = 0;
            int pageSize = 100;
            NotesMetadataList serchResult1 = noteStoreClient.findNotesMetadata(filter, offset, pageSize, spec);

            LOG.d("serchResult1.getNotes().size():" + serchResult1.getNotes().size());
            LOG.d("serchResult1.getUpdateCount() :" + serchResult1.getUpdateCount());

            LOG.d("Sleep 60s");
            try {
                Thread.sleep(60000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            LOG.d("Sleep END");

            NotesMetadataList serchResult2 = noteStoreClient.findNotesMetadata(filter, offset, pageSize, spec);

            LOG.d("serchResult2.getNotes().size():" + serchResult2.getNotes().size());
            LOG.d("serchResult2.getUpdateCount() :" + serchResult2.getUpdateCount());

        } catch (EDAMUserException | EDAMSystemException | TException | EDAMNotFoundException e) {
            e.printStackTrace();
        }
    }

テストコード実行結果ログ

使用しているEvernoteライブラリ

  • com.evernote:android-sdk:2.0.0-RC4
  • library_evernoteSDK1.25

どちらも同じ結果。

08-20 18:54:02.445 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:911>> MAKE EvernoteSession
08-20 18:54:02.446 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:925>> isLoggedIn:true
08-20 18:54:02.446 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:927>> GET NoteStore
08-20 18:54:02.743 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:930>> UpdateCount:20417
08-20 18:54:02.744 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:933>> GET Default Notebook
08-20 18:54:02.904 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:936>> Create New Note
08-20 18:54:03.267 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:944>> UpdateCount:20418
08-20 18:54:03.490 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:961>> serchResult1.getNotes().size():0
08-20 18:54:03.491 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:962>> serchResult1.getUpdateCount() :20418
08-20 18:54:03.491 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:965>> Sleep 60s
08-20 18:55:03.492 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:971>> Sleep END
08-20 18:55:03.668 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:975>> serchResult2.getNotes().size():1
08-20 18:55:03.668 28009-28105/jp.eek.nap.writenote D/LOG: <<EvernoteAPI#testEvernote:976>> serchResult2.getUpdateCount() :20418

問題の場所

Create New Note
UpdateCount:20418

ノート作成後のUpdateCountは20418。

serchResult1.getNotes().size():0
serchResult1.getUpdateCount() :20418

最初の検索結果は、ヒット数が0、UpdateCountが20418

60秒(1分)待って再度、検索を行うと、

serchResult2.getNotes().size():1
serchResult2.getUpdateCount() :20418

2回目(時間が経ってから)の検索結果は、ヒット数が1、UpdateCountが20418

最初の検索結果が、おかしい!!

検索結果に反映されるようになるには、もとから時間がかかるそうです。(2017-09-08 追記)

いろいろ、Evernoteとやり取り1して、やっと、技術担当者(英語)から返事をもらいました。

it takes some time for our search indexes (used for findNotes and findNotesMetadata) to get updated, it’s not instantaneous.

it’s not instantaneous.(それは瞬間的ではありません。)」え〜〜。瞬時でないのはわかるけど、30秒以上もかかるのはどうかと。。。

それに、以前はもっと早く反映されていたし、そもそも、最新の情報に基づく検索結果じゃないのに、UpdateCountが最新で返ってくるのもおかしいと思う。 でないと、検索結果の正しいかどうかがわからない。

また、僕の環境では発生していないけど、検索に引っかからない人もいるので、それはどうなんだろう?

一応、以下の2点を再度、問い合わせしてますが、返事が来るのがいつになることやら。。。(本当にくるのかも疑問)

  • 検索結果に反映されるまでの、どれぐらいの時間を待てばいいのか、または、最新の情報に基づく検索結果かどうかを判断する方法を教えて欲しい。
  • 何日まっても検索に反映されない人があるので、調査して欲しい(検索に出ない証拠のスクリーンショットを付けて尋ねています)

2017-09-16 追記

Evernoetの検索不具合のその後について。


  1. といっても、なかなか進まないので、回数は少ない。。 ↩︎