gpt4 book ai didi

python - Elasticsearch找不到关键字搜索

转载 作者:行者123 更新时间:2023-12-03 00:47:35 31 4
gpt4 key购买 nike

我要转到一个有PDF文件的文件夹。在for循环中,我提取每个PDF文件的文本。我的PDF文件中带有文件名的文本(字符串)以名为“e1”的JSON格式存储。然后,我将此e1插入 flex 搜索数据库中。
每次在for循环中索​​引号都会增加。

我希望能够基于关键字搜索获得Json对象的列表。这样我可以看到关键字存在于哪些对象(我在Elasticsearch中插入的“e1”)中。
我现在得到错误DSL类science在查询中不存在。虽然“科学”一词在PDF中出现了很多次!

import PyPDF2

def read_pdf(pdf_file):
string_file=""
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
for page_number in range(number_of_pages):
page = read_pdf.getPage(page_number)
page_content = page.extractText()
string_file+=page_content
return string_file

import glob
pdf_list=glob.glob('/home/Jen/Mongo/PDF/*.pdf')

from elasticsearch import Elasticsearch
es=Elasticsearch([{'host':'localhost','port':9200}])



count=0
for i in pdf_list:
count +=1
print(count)

stringi = i.replace('/home/Jen/Mongo/PDF/','')
text=(read_pdf(i))
lowercase_name=stringi.lower()
text=text.lower()
e1={
"filename":stringi,
"text":text}
res = es.index(index=count,doc_type='PDF',id=1,body=e1)

z=input("keyword")# I insert science here
z=z.lower()

from elasticsearch_dsl import Search

s = Search().using(es).query(z)
print(s)

更新此代码不显示任何内容:
import PyPDF2

def read_pdf(pdf_file):
string_file=""
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
for page_number in range(number_of_pages):
page = read_pdf.getPage(page_number)
page_content = page.extractText()
string_file+=page_content
return string_file

import glob
pdf_list=glob.glob('/home/Jen/Mongo/PDF/*.pdf')

from elasticsearch import Elasticsearch
es=Elasticsearch([{'host':'localhost','port':9200}])



count=0
for i in pdf_list:
count +=1
print(count)

stringi = i.replace('/home/Jen/Mongo/PDF/','')
text=(read_pdf(i))
lowercase_name=stringi.lower()
text=text.lower()
e1={
"filename":stringi,
"text":text}
res = es.index(index="my_name",doc_type='PDF',id=count, body=e1)

print("Test")
from elasticsearch_dsl import Search

s = Search(using=es, index="my_name").query("match", title="science")

response = s.execute()

for hit in response:
print(response.hits)

最佳答案

这段代码:

res = es.index(index=count,doc_type='PDF',id=1,body=e1)

您正在创建 0,1,2..N类型的索引 0(因为计数是从 NPDF),并且每个索引中的每个文档都具有 _id=1
检查 documentation

应该是这样的:
res = es.index(index="my_name",doc_type='PDF',id=count, body=e1)

如果您正确地完成了数据处理的第一部分,则所有文档都应在 my_name索引中,并且每个文档都应具有自己的 _id(从1到N)。

只需运行Kibana GET _cat/indices?v并检查您的解决方案和这些更改即可。

作为问题的第二部分,您可以使用以下命令在 my_index中搜索“科学”(对于所有文档):
GET my_index/_search
{
"query": {
"match": {
"my_field": "science"
}
}
}

更新了
要么
GET my_index/_search
{
"query": {
"bool": {
"must": {
"match": {
"my_field": "science"
}
}
}
}
}

更新2 (Python)
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search

client = Elasticsearch()

s = Search(using=client, index="my_index").query("match", title="science")

response = s.execute()

for hit in response:
print(response.hits)
# print(hit) / or print(hit.title, hit.id, ..)

关于python - Elasticsearch找不到关键字搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58323852/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com