Sphinx の検索は、スペース区切りで複数の単語を入力すると、すべての単語が含まれるドキュメントのみがヒットする(AND検索になる)。 実装はこちら: https://github.com/sphinx-doc/sphinx/blob/master/sphinx/themes/basic/static/searchtools.js_t#L363 (performTermsSearch関数)
・・・はずなのだけれど、直観的に不思議な挙動をする場合がある様子。
# base image | |
FROM docker.elastic.co/elasticsearch/elasticsearch:7.7.0 | |
# PATH | |
ENV PATH /usr/share/elasticsearch/bin:$PATH | |
# work directory | |
WORKDIR /usr/share/elasticsearch | |
USER elasticsearch |
{ | |
"ア": ["a"], "イ": ["i"], "ウ": ["u"], "エ": ["e"], "オ": ["o"], | |
"カ": ["ka"], "キ": ["ki"], "ク": ["ku"], "ケ": ["ke"], "コ": ["ko"], "キャ": ["kya"], "キュ": ["kyu"], "キョ": ["kyo"], | |
"ガ": ["ga"], "ギ": ["gi"], "グ": ["gu"], "ゲ": ["ge"], "ゴ": ["go"], "ギャ": ["gya"], "ギュ": ["gyu"], "ギョ": ["gyo"], | |
"サ": ["sa"], "シ": ["si", "shi"], "ス": ["su"], "セ": ["se"], "ソ": ["so"], "シャ": ["sya", "sha"], "シュ": ["syu", "shu"], "シェ": ["sye", "she"], "ショ": ["syo", "sho"], | |
"ザ": ["za"], "ジ": ["zi", "ji"], "ズ": ["zu"], "ゼ": ["ze"], "ゾ": ["zo"], "ジャ": ["zya", "ja"], "ジュ": ["zyu", "ju"], "ジェ": ["zye", "je"], "ジョ": ["zyo", "jo"], | |
"タ": ["ta"], "チ": ["ti", "chi"], "ツ": ["tu", "tsu"], "テ": ["te"], "ト": ["to"], "チャ": ["tya", "cha", "cya"], "チュ": ["tyu", "chu", "cyu"], "チョ": ["tyo", "cho", "cyo"], | |
"ダ": ["da"], "ヂ": ["di", "zi", "ji"], "ヅ": ["du", "zu"], "デ": ["de"], "ド": ["do"], "ヂャ": ["dya", "zya", "ja"], "ヂュ": ["dyu", "zyu", "ju"], "ヂョ": ["dyo", "zyo", "jo"], | |
"ナ": ["na"], "ニ": ["ni"], "ヌ": ["nu"], "ネ": ["ne"], "ノ": ["no"], "ニャ": ["nya"] |
import org.apache.lucene.document.Document; | |
import org.apache.lucene.document.Field; | |
import org.apache.lucene.document.StringField; | |
import org.apache.lucene.document.VectorField; | |
import org.apache.lucene.index.*; | |
import org.apache.lucene.search.IndexSearcher; | |
import org.apache.lucene.search.KnnGraphQuery; | |
import org.apache.lucene.search.ScoreDoc; | |
import org.apache.lucene.search.TopDocs; | |
import org.apache.lucene.store.Directory; |
import java.io.IOException; | |
import java.nio.file.FileVisitResult; | |
import java.nio.file.Files; | |
import java.nio.file.Path; | |
import java.nio.file.Paths; | |
import java.nio.file.SimpleFileVisitor; | |
import java.nio.file.attribute.BasicFileAttributes; | |
import java.util.Arrays; | |
import java.util.Random; |
/** | |
* PoC Indexing/Querying example code for LUCENE-9004 | |
* @see https://github.com/mocobeta/lucene-solr-mirror/tree/jira/LUCENE-9004-aknn | |
*/ | |
public class VectorValuesFieldExample { | |
public static void main(String[] args) { | |
String indexDir = "/tmp/vector-search"; | |
String vectorField = "vector"; | |
int maxDoc = 100_000; |
import MeCab | |
import sys | |
raw_text_file = sys.argv[1] | |
preprocessed_file = sys.argv[2] | |
# preprocess for pke | |
m = MeCab.Tagger() | |
with open(raw_text_file) as src: | |
with open(preprocessed_file, 'w') as dst: |
親譲《おやゆず》りの無鉄砲《むてっぽう》で小供の時から損ばかりしている。小学校に居る時分学校の二階から飛び降りて一週間ほど腰《こし》を抜《ぬ》かした事がある。なぜそんな無闇《むやみ》をしたと聞く人があるかも知れぬ。別段深い理由でもない。新築の二階から首を出していたら、同級生の一人が冗談《じょうだん》に、いくら威張《いば》っても、そこから飛び降りる事は出来まい。弱虫やーい。と囃《はや》したからである。小使《こづかい》に負ぶさって帰って来た時、おやじが大きな眼《め》をして二階ぐらいから飛び降りて腰を抜かす奴《やつ》があるかと云《い》ったから、この次は抜かさずに飛んで見せますと答えた。 | |
親類のものから西洋製のナイフを貰《もら》って奇麗《きれい》な刃《は》を日に翳《かざ》して、友達《ともだち》に見せていたら、一人が光る事は光るが切れそうもないと云った。切れぬ事があるか、何でも切ってみせると受け合った。そんなら君の指を切ってみろと注文したから、何だ指ぐらいこの通りだと右の手の親指の甲《こう》をはすに切り込《こ》んだ。幸《さいわい》ナイフが小さいのと、親指の骨が堅《かた》かったので、今だに親指は手に付いている。しかし創痕《きずあと》は死ぬまで消えぬ。 | |
庭を東へ二十歩に行き尽《つく》すと、南上がりにいささかばかりの菜園があって、真中《まんなか》に栗《くり》の木が一本立っている。これは命より大事な栗だ。実の熟する時分は起き抜けに背戸《せど》を出て落ちた奴を拾ってきて、学校で食う。菜園の西側が山城屋《やましろや》という質屋の庭続きで、この質屋に勘太郎《かんたろう》という十三四の倅《せがれ》が居た。勘太郎は無論弱虫である。弱虫の癖《くせ》に四つ目垣を乗りこえて、栗を盗《ぬす》みにくる。ある日の夕方|折戸《おりど》の蔭《かげ》に隠《かく》れて、とうとう勘太郎を捕《つら》まえてやった。その時勘太郎は逃《に》げ路《みち》を失って、一生懸命《いっしょうけんめい》に飛びかかってきた。向《むこ》うは二つばかり年上である。弱虫だが力は強い。鉢《はち》の開いた頭を、こっちの胸へ宛《あ》ててぐいぐい押《お》した拍子《ひょうし》に、勘太郎の頭がすべって、おれの袷《あわせ》の袖《そで》の中にはいった。邪魔《じゃま》になって手が使えぬから、無暗に手を振《ふ》ったら、袖の中にある勘太郎の頭が、右左へぐらぐら靡《なび》いた。しまいに苦しがって袖の中から、 |
package example; | |
import org.apache.lucene.analysis.standard.StandardAnalyzer; | |
import org.apache.lucene.document.*; | |
import org.apache.lucene.index.*; | |
import org.apache.lucene.queryparser.classic.ParseException; | |
import org.apache.lucene.queryparser.classic.QueryParser; | |
import org.apache.lucene.search.*; | |
import org.apache.lucene.store.Directory; | |
import org.apache.lucene.store.FSDirectory; |
Sphinx の検索は、スペース区切りで複数の単語を入力すると、すべての単語が含まれるドキュメントのみがヒットする(AND検索になる)。 実装はこちら: https://github.com/sphinx-doc/sphinx/blob/master/sphinx/themes/basic/static/searchtools.js_t#L363 (performTermsSearch関数)
・・・はずなのだけれど、直観的に不思議な挙動をする場合がある様子。
import org.apache.lucene.analysis.Analyzer; | |
import org.apache.lucene.analysis.TokenStream; | |
import org.apache.lucene.analysis.ja.JapaneseAnalyzer; | |
import org.apache.lucene.analysis.ja.JapaneseTokenizer; | |
import org.apache.lucene.analysis.ja.tokenattributes.PartOfSpeechAttribute; | |
import org.apache.lucene.analysis.ja.tokenattributes.ReadingAttribute; | |
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; | |
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; | |
import org.apache.lucene.analysis.util.CharArraySet; |