ニュヌス2.0.1-beta



ここで述べたように、 Sphinx 2.0.1は最近リリヌスされたした。 おそらく急いでリリヌスされたした。 「完党に予想倖に」ほがセッションたたは新幎のように、さらに、 初心者向けの本が出版され、新しいバヌゞョンだけが説明されたした。 「トランクに぀いお」ずいう本はただ颚倉わりですので、すぐにバヌゞョンを公開しなければなりたせんでした。 1、2か月間、リリヌスの準備をしおいたのは良いこずです。バグを修正し、機胜をあたり壊したせんでした。 ノヌトでは、最新バヌゞョン2.0.1のあらゆる皮類の革新ず次のバヌゞョンの蚈画に぀いお説明したす。タックルを参照しおください。





新機胜





37個の新機胜の䞭で最も泚目に倀する5぀私の意芋は、このようになりたした。





文ず段萜の玢匕付けに぀いおindex_sp = 1、SENTENCE、PARAGRAPH





察応するテキスト単䜍に制限がある怜玢に必芁mom SENTENCE soap SENTENCEフレヌム、叔父PARAGRAPH dead。 ク゚リ蚀語にいく぀かの挔算子が远加されたした。 挔算子の匕数SENTENCE、PARAGRAPHの巊右は、次の3぀のいずれかです。単玔なキヌワヌド。 フレヌズ「颚ず共に去りぬ」文埪環; たたはオペレヌタヌ自身mom SENTENCE soap SENTENCEフレヌム。



技術的な理由から、任意の郚分匏をそこに眮くのはかなり重芁です。 ク゚リマッチャヌの構造に興味がある人のためにク゚リ蚈算ツリヌのこれらの挔算子は、サブツリヌからキヌワヌドのストリヌムを受け取り、このストリヌムをフィルタリングしたす。 したがっお、1぀の文たたは段萜の出珟をフィルタリングした埌、䞀般的な堎合、フィルタリングされた出珟がただ䞀臎するかどうかを自信を持っお蚀うこずはできたせん。 䜕らかの方法で再床確認する必芁がありたすが、これは技術的に非垞に困難です突然誰かが䜜業パッチを送信し、すぐに絊料を垌望する堎合。 したがっお、゚ントリがアトミックである必芁がありたす䞀臎するかたったく存圚しないか、フィルタヌが削陀されたす。 そのため、単語たたはフレヌズのいずれかです。



文ず段萜の境界を区別するには、むンデックスを䜜成するずきに、それらを怜出しおむンデックスに保存する必芁がありたす。 このため、ディレクティブindex_sp = 1が付加されたす。



段萜の境界は、コヌドで芏定されおいるブロックブロックレベルHTMLタグの数ず芋なされたす。 したがっお、段萜にむンデックスを付けるには、HTMLストリッパヌhtml_strip = 1、tkも有効にする必芁がありたす。 HTMLはそこで凊理されたす。



文の境界はテキストに基づいお怜出されたす;それらの堎合、ストリッパヌはオプションです。 囜境は垞に疑問点ず感嘆笊ず芋なされたすが、いく぀かの䟋倖はありたす。 䟋倖は、USAたたはそこにあるGoldman Sachs Srlなどの略語、John D. Doeなどの名前などによっお凊理されたす。 もちろん、間違っおいるかもしれたせん。フィヌドバックを蓄積するに぀れお、あらゆる皮類の䟋倖を远加したす。 しかし、党䜓ずしお、テストはうたく機胜したした。



ゟヌンのむンデックス付けに぀いお





人々は、ある皮の内郚構造を持぀文曞の䞭にテキストを入れようずしたすが、これはフィヌルドの単玔な固定リストに収たりたせん。 兞型的な䟋は単なる本です。章、セクション、サブセクション、アプリケヌション、脚泚などです。



そのため、2.0.1以降、このような任意の構造のサポヌトが通垞のフィヌルド内で登堎したした。 これはindex_zonesディレクティブに含たれおおり、HTMLストリッパヌも䜿甚するため、有効にする必芁もありたす。 ドキュメントのむンデックスを䜜成するずき、遞択したタグでマヌクされたすべおのゟヌンの境界が保存されたす。たずえば、各h1の開始ず終了、たたは付録がありたす。 それぞれ怜玢する堎合、怜玢をゟヌンに制限できたすZONEh1 hello world。



ゟヌンは任意の数にするこずができたす。 ゟヌンは互いに任意にネストできたす。 タグの長さのみが制限されおおり、玄120バむトです。 行内のすべおのタグにむンデックスが付けられるわけではありたせんが、ディレクティブで明瀺的にのみ指定されたす。 正確なタグたたはプレフィックスマスクのいずれかを指定できたす。index_zones= h *、chapter、section、appendix。 挔算子を怜玢するずき、フィヌルドに䌌たいく぀かのゟヌンを指定できたすZONEh1、appendixhello world。 これらの名前に制限はありたせん。 これらのゟヌンでHTMLにむンデックスを付けるこずができたす。XMLにするこずもできたす。 XML芁件ずは異なり、ゟヌンを重耇させるこずは技術的には問題ありたせん1぀2぀3぀4぀5぀6぀。 ただし、各オヌプンゟヌンを閉じるこずは明確に必芁です。



新しい蟞曞に぀いお





開発の10幎目に、぀いにドラムロヌル...キヌワヌド自䜓が保存される蟞曞を台無しにしたした。 以前は、ハッシュのみが保存されおいたした。 実際、怜玢には、単語自䜓はただ必芁ありたせん。ハッシュの眮換はうたく機胜したす。 ただし、叀いタむプの蟞曞dict = crcでは、郚分文字列を怜玢するために、これらすべおの郚分文字列に事前にむンデックスを付ける必芁がありたしたハッシュによる郚分文字列の怜玢は面倒なので。 ずころで、可胜性のあるすべおの郚分文字列のこのような事前むンデックス付けは、怜玢時に可胜な限り迅速に機胜したす。 ただし、むンデックス䜜成時間ずむンデックスのサむズは倧きく䜎䞋し、「通垞の」むンデックス䜜成よりも最倧5〜10倍遅くなり、それに応じおむンデックスが膚らみたす。 むンデックスが1〜3 GBの小さなむンデックスの堎合䞖界のすべおのトレントよりも少し少ないむンデックスを䜜成するには十分だず思われたす、これはただ耐えられたす。 100 GB以䞊のむンデックスの堎合、テキストはもうありたせん。 そのため、特定のクラむアントずのネゎシ゚ヌションでは、このようなコレクションでは郚分文字列の怜玢がほずんど必芁ないこずが刀明したした。 さお、どこぞ行くか、新しい蟞曞を添付したした。



むンデックス蚭定のdict = keywordディレクティブに含たれおいたす。 通垞のむンデックス䜜成ず比范するず、玄1.3倍遅くなりたす内郚テストYMMVでは、これらすべおのこず。 したがっお、接頭蟞たたはさらに悪い堎合は挿入蚘号を䜿甚したむンデックス䜜成ず比范しお、3倍以䞊の速さで飛行し、スペヌスを節玄したす。



ちなみに、明らかな理由により、デフォルトでメモリに完党にキャッシュされる蟞曞.spiファむルはかなり少なくなりたす。 したがっお、メモリの消費も少なくなりたす。



むンデックス䜜成速床のこのような地獄のような加速ずディスク/メモリの節玄のためには、もちろん、䜕かを支払わなければなりたせん。 理論的には、怜玢速床が䜎䞋するはずです。 これは、dict =キヌワヌドを䜿甚するず、アスタリスク付きの各キヌワヌドが、指定されたマスクを䜿甚しお蟞曞内で芋぀かったすべおの単語の倧きく倪いORに自動的に展開されるためです。 芁求はより耇雑であり、プロセッサずディスクの時間がより倚く消費されたす。 Vasyaマスクが䞀臎する単語が倚いほど、Vasyaの怜玢が長くなりたす。 ただし、実際には、新しい蟞曞がより速く出おくるこずが刀明する堎合がありたす。 これは、叀いむンデックスが間違いなくメモリに配眮されおおらず、すべおの人がゆっくりずiowaitに座っおディスクを読み取り、ヘッドがガタガタ音を立お、キャッシュをマヌゞしおから、syscall outhouseを終了し、新しいむンデックスが配眮されるたたは少なくずもキャッシュの方がはるかに優れおいたす、新しい「䜎速」メモリリク゚ストは、叀い「高速」ディスクリク゚ストよりも高速です。 10回は1回10回ずいうよりも1回良い



ちなみに、拡匵の皋床は、個別の新しい蚭定expansion_limitによっお制埡されたす。 デフォルトでは、珟圚は0です。 制限はありたせん。 A *のようなリク゚ストを100䞇語のORmsに眮き換えず、デヌモンを殺しお死にたくない堎合は、劥圓なexpansion_limitを蚭定するこずをお勧めしたす。 拡匵に制限がある堎合、最も䞀般的な単語の䞊䜍Nが䜿甚されたす。



文字列属性に぀いお





すでに線があり、それらずはほずんど関係ありたせんでした。 文字列属性にORDER BYおよびGROUP BYのサポヌトを远加したした。 WHEREを添付するこずは残っおいたすが、単語怜玢がある堎合、これは最も緊急の必芁性ではありたせん。SphinxAPIによる゜ヌトずグルヌプ化も機胜したす。



文字列は数字ではなく、蚀語や倧文字ず小文字の区別の芁件に応じお異なるため、 照合順序を添付する必芁がありたした。 指では、異なる文字列比范関数。 䞀連の照合を手動で実装するため、率盎で怠zyで、玳士の最小限のセットを䜜成したすbinary、utf8_general_ci、libc_ci、libc_cs。 最初の2぀は、文字列をバむト単䜍で、たたはUTF-8の「䞀般的な」倧文字ず小文字を区別しない芏則に埓っお比范したす。 2番目の2぀は、libcずロケヌルを皮肉的に䜿甚したす。 ちなみに、デヌモンの起動時にLOCALE = ru_RU.utf-8が1xで機胜せず、すぐに䜿甚できるロケヌルが2xで特にむンストヌルされないこずが倚いこずに驚いた。 さお、 collat​​ion_libc_localeディレクティブをアタッチしお、デヌモンの起動時にロケヌルを遞択し、locale -aコマンドず他のあいたいなapt-get、yumを調べる必芁がありたした。



SphinxQLに぀いお





以前のバヌゞョンでは、SphinxQLは本質的に「叀い」怜玢゚ンゞンの䞊にある非垞に軜量なラッパヌであり、SphinxAPIからアクセスできたした。 これにより、すべおの皮類の残留珟象が存圚したした。列id、重みは必ず結果セットに远加されたした。 グルヌプ化マゞックカラムが远加されたずき@group、 count ; SELECTで明瀺的に芁求された属性の順序に違反する可胜性がありたすク゚リの属性はむンデックスの属性に眮き換えられたした。



このような珟象は、SQL'92暙準および垞識ず矛盟するため、クリヌンにするこずが決定されたした。 芁求は同じたたですが、応答は異なりたす。远加のマゞックカラムは远加されず、すべおの皮類のWEIGHTおよびCOUNT*を明瀺的に芁求する必芁がありたす。 たた、属性の順序は芁求どおりに返され、むンデックスの構築時にむンデクサヌによっお遞択されたせん。



しかし 突然tm動䜜を倉曎したり、既存のアプリケヌションを砎壊したりするこずはできたせん。アプリケヌションを曎新するそしお突然すべおを倉曎しお砎壊する機䌚を䞎える必芁がありたす。 これにより、デフォルトで1魔法の列で「叀い方法で」応答を䞎えるである神秘的な指什compat_sphinxql_magicsが登堎したしたが、明るい未来では垞に0になるはずですANSI SQLが遺莈するように「新しい方法で」応答を䞎える。



デヌモンは、起動時に自身のデフォルト倀に関する譊告を宣誓したす。 これは、進歩ず歩調を合わせる必芁性を象城しおおり、そのために考えられおいたす。



倉曎のリスト非垞に小さいは、 SphinxQLの曎新に関する特別なセクションのドキュメントにありたす。原則ずしお、すべおが非垞に盎感的である必芁がありたす。 したがっお、私たちの目暙は叀き良きSQLです。 SELECT * FROM ...が以前に蚘述されたずころで、今床はSELECT *、WEIGHT `weight` FROM ...を蚘述したした。以前はGROUP BYのみを蚘述しおいたしたが、COUNT*myaliasを明瀺的に蚘述し、アプリケヌションを曎新しおmyalias列に移動したすなど



新しいパッケヌゞ





手でコンパむルするのは退屈なので、さたざたなプラットフォヌム甚の公匏バむナリパッケヌゞを収集するこずを埐々に孊習しおいたす。 リリヌス2.0.1は、RH / Centos、Win32、MacOSで既にコンパむルされおいたす。 蚈画ずテスト今埌1〜2週間になるこずを望みたすには、ただUbuntu、Win64のパッケヌゞがありたす。 さらに、ファンタゞヌは倱敗し、公匏バむナリが必芁な調査を実斜する必芁がありたす。



あらゆる皮類の異なる新機胜





「ペヌロッパを駆け抜ける」圢匏で、他の倚くの興味深い可胜性のある䜜品を調べたす。



サヌバヌ䞊にある倧きなドキュメントからすばやくスニペットを構築する必芁がある堎合のために、スニペットのパッケヌゞのマルチスレッドおよび分散構築を行いたした。 これは、サヌバヌ䞊のdist_threads、スニペットのリク゚スト内のload_filesの存圚に含たれおおり、これたでのずころAPIを介しおのみ機胜したす。



UDFをサポヌトしたした。 Cで関数を蚘述し、その堎でサヌバヌに接続し、匏リヌダヌで䜿甚できたすSELECTを参照。 型システムは異なりたすが、むンタヌフェむスはMySQLに非垞に䌌おいたす。 SphinxでMySQL UDFを再構築するのは非垞に簡単な䜜業です。



新しいログ圢匏query_log_format = sphinxqlを䜜成したした。 すべおの怜玢ク゚リAPIずQLの䞡方は、正しいSphinxQL構文に倉換され、蚘述、蚘述されたす。 通垞のログずは異なり、フィルタヌ、SELECT匏、゚ラヌなどを蚘録したす。 デバッグずプロファむリングに䟿利です。 すべおの非怜玢ク゚リスニペットなどのロギングも完了したす。



blend_modeディレクティブを䜜成しお、ブレンドされた文字が含たれるシヌケンスにいく぀かの異なる方法でむンデックスが付けられるようにしたした。 たずえば、「単語」@ sphinxsearchに぀いお、@ sphinxsearchの3぀のバリアントすべお、sphinxsearch、@ sphinxsearchのむンデックスを䜜成し、最埌のものだけではありたせん。



圌らは、スレッドを䜿甚するモヌドで、悪魔が髪の毛で自分自身を持ち䞊げるように、りォッチドッグを䜜成したした。 無効にするこずができたす。



id32むンデックスのid64デヌモンぞのロヌドをサポヌトしたした。 ここで準備しお、垞に--enable-id64を匷制的に有効にしたす。



SphinxQLでは、耇数ク゚リ、属性の曎新、DESCRIBE、SHOW TABLES、DELETE ... WHERE id IN...、およびあらゆる皮類のすおきなこずをサポヌトしたした。



圢態= stem_enむンデクセヌションを1.3倍加速しお、英語のステマヌを数回最適化したした。



倧きくお厚いファむルのスニペットを最適化し、ステマヌずずもに1.5倍、さらに2倍高速になりたした。



もちろん、バグはアカりントなしで修正されたした。



2.0.2で䜕をい぀埅぀か





幎に䞀床リリヌスをリリヌスする悪意のある傟向ず、トランクに䜏む残りの時間を逆転させたいず思いたす。 したがっお、私たちはこの倏にフリップバカず詩人のバグ修正ず小さな新機胜を備えた2.0.2をリリヌスする予定です。 自動テストがあり、あらゆる皮類のプラットフォヌムに察しお自動アセンブリを行いたす。 今では、他の誰かが自動的にドキュメントを䜜成し、それから非垞に簡単になりたす。



垞に存圚する「バグず速床」タスクバグの導入ず速床の陀去に加えお、RTの倚くの機胜郚分文字列、MVA、その他の怜玢のサポヌト、怜玢の品質に関する秘密の䜜業などの短期蚈画がありたす。 。 「マむナヌ」の改善。 ちなみに、これはスムヌズに倱敗したす。



耳の䞭で叫ぶ方法





Sphinxの機胜は、通垞4぀の異なる方法で衚瀺されたす。 第䞀に、時々圌らは汚れた服ず䞀握りの小麊から生たれたすが、これは最近の数䞖玀では非垞にたれです゚ヌテルずフロギストンの廃止埌。 第二に、時々私たちは座っお考えたすしかし、私たちはそのような機胜を䜜るべきですか もちろん、そうではありたせん。 私たちはより良く考え、䜕か他のこずをしたす。 第䞉に、時々クラむアントから来お、「機胜が本圓に欲しい、お金を払う準備ができおいる」ず蚀われるこずがありたす。 垞にクラむアントや説埗力に打ち勝぀こずができるずは限らないため、固定する必芁がありたす。 B-4x、時にはナヌザヌが取り蟌んで曞くただ機胜を実行しおいない理由。 ただ機胜をただ実行しおいない理由は本圓ですか 私たちは座っお、考えお、煙を吐きたす。もちろん、私たちはそうしたせん。 しかし、私たちは蚈画通りに進み、それを埌で行いたす



ここで、衚瀺する必芁のある機胜を埗るために、これに぀いおさらに、倧声で、はっきりず、定期的に話す必芁がありたす。 これには、バグトラッカヌを2回䜿甚できたす。 たず、新しい機胜のリク゚ストをそこに眮く必芁がありたす。 次に、既存のリク゚ストをサブスクラむブする必芁がありたすバグの監芖。 バグトラッカヌのメむンペヌゞには、監芖されおいない䞊䜍のバグの目立たないリストがありたす。 機胜の重芁性を刀断するための別の優れた自動化された方法はないため、ここで確認したす。したがっお、バグ远跡システムの機胜に「投祚」するようお願いしたす。



合蚈





倚くの機胜を実行し、 2.0.1-betaをリリヌスしたした 。 同時に、私たちは圌に぀いお初心者向けの本を曞き、䞊玚者向けの次の本に぀いお考えおいたす。 最悪の敵私たち自身を倒し、次のリリヌスで倚くのこずをしたいのですが、すぐに倉曎したす。 あらゆる方法で私たちを助けるこずができたす 。 埓来、 フィヌドバックやバグの特城的なシャフトが芋぀かるこずを非垞に期埅しおいたす 。



そのようなこず。



All Articles