0

スフィンクス インデックスに必要なデータを選択するクエリがあります。私が行っていることの 1 つは、複数の名前エイリアス、異なる言語などの concat_ws です。これは、名前が重複している場合に問題になります。たとえば、あるエントリには「Clannad」という名前があり、代替タイトルは「CLANNAD -クラナド-」です。もう一つは、「クラナド アフター ストーリー」、「クラナド アフター ストーリー」、「クラナド アフター ストーリー」です。この特定のケースではこれが簡単に解決されることを知っているので、今は我慢してください。「Clannad」で検索すると、「Clannad」での二重一致のため、After Story エントリが最初に取得されます。

私がやりたいのは、concat_ws ステートメントで重複する単語/一意でない単語をすべて削除することです。それさえ可能なら。

クエリは次のようになります。

SELECT CONCAT_WS(' ',a.Name,a.Name2,a.Name3,a.Name4) AS name

(この質問を正しく構成したことを願っています。これが私の最初の質問です)ありがとう、

4

1 に答える 1

0

Marc がコメントで示唆しているように、これを SQL で管理するのは非常に困難です (私が見る限り)。処理された値を別の列にキャッシュしてから、インデックスを作成することをお勧めします。

SELECT a.name_words AS name, ...

それぞれの名前の値を組み合わせて個別の単語を取得することは別の問題ですが、それは手元にある言語によって異なります。ただし、正規表現が役立つはずです。Ruby での簡単な試みを次に示します。

[name, name2, name3, name4].join(' ').split(/\b/).reject { |word|
  word.blank?
}.collect { |word|
  word.downcase
}.uniq
于 2011-06-28T07:31:32.963 に答える