elasticsearchでベクトル検索

# Pythonの各種パッケージのインストール

```bash
pip install langchain
pip install unstructured
pip install sentence-transformers
pip install langchain-elasticsearch
```

# Wikipediaのお好み焼きに関するHTMLファイルの読み込み＆分割

以下を保存＆作業ディレクトリへ移動。
https://ja.wikipedia.org/wiki/%E3%81%8A%E5%A5%BD%E3%81%BF%E7%84%BC%E3%81%8D

```python
# %%
from langchain_community.document_loaders.html import UnstructuredHTMLLoader

loader = UnstructuredHTMLLoader(file_path='/home/onoyu1012/workspace/elasticsearch/お好み焼き - Wikipedia.html')
data = loader.load()
print(data)
# %%
from langchain_text_splitters.character import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=0)
documents = text_splitter.split_documents(documents=data)
for document in documents:
    print(document)
    print(len(document.page_content))
# %%
```

# Embeddingモデル(日本語をベクトル化するためのモデル)の読み込み

Hugging FaceでAccess Tokensをコピー＆ペースト。
https://huggingface.co/settings/tokens
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/f884e6ce-e3ec-481f-f7b4-bcb86eee7650.png)

```python
# %%
import os

os.environ['HUGGINGFACEHUB_ACCESS_TOKEN'] = '<INPUT YOUR ACCESS TOKEN>'
# %%
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings

embedding = HuggingFaceEmbeddings(model_name='intfloat/multilingual-e5-large')
```

# Elasticsearchの接続開始

```python
# %%
username = 'admin'
passwrod = '<INPUT YOUR ADMIN PASSWORD>'
host = 'https://%s:%s@<INPUT YOUR HOSTNAME>:<INPUT YOUR PORT NUMBER>' % (username, passwrod)
print(host)
# %%
client = Elasticsearch(hosts=host, ca_certs='<INPUT YOUR CERTIFICATE AUTHORITY FILE PATH>')
# %%
```

# ベクトル登録＆検索

```python
# %%
from langchain_elasticsearch import ElasticsearchStore

vectorstore = ElasticsearchStore.from_documents(documents=documents, embedding=embedding, index_name='test', es_connection=client)
# %%
results = vectorstore.similarity_search(query='九州のお好み焼きについて教えて下さい。')
for result in results:
    print(result)
# %%
```

>page_content='広島お好み焼物語 ふしぎな食べものが生まれたのはなぜ？' metadata={'source': '/home/onoyu1012/workspace/elasticsearch/お好み焼き - Wikipedia.html'}
>page_content='目次の表示・非表示を切り替え\n\nお好み焼き\n\n37の言語版\n\nالعربية\n\nمصرى\n\nবাংলা\n\nCatalà\n\nČeština\n\nDansk\n\nDeutsch\n\nΕλληνικά\n\nEnglish\n\nEspañol\n\nفارسی\n\nSuomi\n\nFrançais\n\nGaeilge\n\nעברית\n\nMagyar\n\nՀայերեն\n\nBahasa Indonesia\n\nItaliano\n\nJawa\n\nქართული\n\n한국어\n\nМакедонски\n\nBahasa Melayu\n\nNederlands\n\nPolski\n\nPortuguês\n\nRomână\n\nРусский\n\nSimple English\n\nSvenska\n\nไทย\n\nTürkçe\n\nУкраїнська\n\nTiếng Việt\n\n中文\n\n粵語\n\nリンクを編集\n\nページ\n\nノート\n\n日本語\n\n閲覧\n\n編集\n\n履歴表示\n\nツール\n\nツール\n\n操作\n\n閲覧\n\n編集\n\n履歴表示\n\n全般\n\nリンク元\n\n関連ページの更新状況\n\nファイルをアップロード\n\n特別ページ\n\nこの版への固定リンク\n\nページ情報\n\nこのページを引用\n\n短縮URLを取得する' metadata={'source': '/home/onoyu1012/workspace/elasticsearch/お好み焼き - Wikipedia.html'}
>page_content='北九州市では、マヨネーズとケチャップを混ぜたオーロラソースをつけて食べるのが定番となっている。\n\n宮崎市には、神戸風の肉天が名物として提供される地域もある。\n\n熊本市域ではお好み焼きに刻んだ沢庵を入れる店が多く、肉は薄切りではなくひき肉を入れる店もある。\n\n沖縄[編集]\n\n沖縄県には「ヒラヤーチー」（平焼き）と呼ばれる料理があり、これはキャベツではなくネギやニラなどを使用する一銭洋食やどんどん焼きに近い軽食である。また、「ポーポー」という小麦粉の薄焼きで味噌や黒糖などを巻いた菓子もあり、こちらはお好み焼きの祖先とされる「麩の焼き」に酷似している。\n\n日本国外[編集]\n\n台湾では「大阪燒」（ダーバンシャオ/中:DàBǎnShāo）の名称で、四角いお好み焼きが、屋台などで広く売られている。\n\nオーストラリア・クイーンズランド州でも人気のお好み焼き屋があり、マーケットやイベント等で出店されることがある。' metadata={'source': '/home/onoyu1012/workspace/elasticsearch/お好み焼き - Wikipedia.html'}
>page_content='福岡市には、厚くどっしりとした生地を特徴とするお好み焼きを出すチェーン店がある。ふわふわが好まれる関西風とは対照的に空気を含ませず、表面はカリカリに焼き上げられる。真っ黒で粘度の高い独特のソースと、カスタードクリーム状の自家製マヨネーズを使用することも大きな特徴である。\n\n元々福岡は、関西風お好み焼きが多かったが、近年は広島風の比率が増えているという[49]。' metadata={'source': '/home/onoyu1012/workspace/elasticsearch/お好み焼き - Wikipedia.html'}

# Elasticsearchの接続終了

```python
# %%
client.close()
```