2017-04-20 7 views
0

Lunrはほとんどの結果を見つけるのに苦労していますが、なぜJSON配列に含まれている複数単語の文字列が返されないのかわかりません。私はお祭りを返しlunr「マイアミ」と「未来」を検索するとなぜlunrはJSON配列の複数の単語列をインデックスに登録しませんか?

[{ 
    "title": "Rolling Loud", 
    "date": "May 5–7", 
    "location": "Miami, FL, USA", 
    "rock-artists": [], 
    "hh-artists": ["Kendrick Lamar", "Future"], 
    "electronic-artists": [], 
    "other-artists": [] 
}] 

は、ここに私のデータが構成されているかの感覚を得るために、サンプルJSONファイルです。しかし、 "Kendrick"や "Kendrick Lamar"を検索する場合、lunrはフェスティバルを返さない。

関連するコード:

// initialize lunr 
var idx = lunr(function() { 
    this.field('id'); 
    this.field('title', { boost: 3 }); 
    this.field('date'); 
    this.field('location'); 
    this.field('rockArtists', { boost: 3 }); 
    this.field('hhArtists', { boost: 3 }); 
    this.field('electronicArtists', { boost: 3 }); 
    this.field('otherArtists', { boost: 3 }); 

    // add festivals to lunr 
    for (var key in data) { 
     this.add({ 
      'id': key, 
      'title': data[key].title, 
      'date': data[key].date, 
      'location': data[key].location, 
      'rockArtists': data[key]['rock-artists'], 
      'hhArtists': data[key]['hh-artists'], 
      'electronicArtists': data[key]['electronic-artists'], 
      'otherArtists': data[key]['other-artists'] 
     }); 
    } 
}); 

ありがとう!

+0

'this'内の' for..in'ループとは何ですか? – guest271314

+0

関数内で 'add()'を呼び出してはいけませんか?私はループの外側から 'idx.​​add'を呼び出す際に問題を抱えていたので、代わりに' this'を使って変数にアクセスしました。 – Corbin

+0

'for..in'ログで' console.log(this) 'とは何ですか? – guest271314

答えて

1

Lunr は、あなたがインデックス内の値のいずれかを探して、このことを確認することができるはずhh-artistsフィールドをインデックスである:ドキュメントフィールドが配列の

idx.invertedIndex['Kendrick Lamar'] 

、lunrがあることを前提としてい配列の要素は既に索引付けのためにトークンに分割されています。したがって、別のトークンとして "Kendrick"と "Lamar"をインデックスに追加する代わりに、 "Kendrick Lamar"が単一のトークンとして追加されます。

「Kendrick Lamar」を検索すると、実際に「Kendrick」または「Lamar」が検索されるため、検索文字列がスペースに分割されてトークンが取得されるため、検索時に問題が発生します。インデックスには "Kendrick"と "Lamar"のどちらもないので、結果はありません。

あなたがトークンにlunrハンドル分割、それを文字列に配列を変換してみましょうことができますのためにあなたが望んでいる結果を得るために:

this.add({ 
    'hhArtists': data[key]['hh-artists'].join(' ') 
}) 
関連する問題