Функция Python Lucene добавляет содержимое поля в документ не работает
Я индексирую страницы URL с помощью Python Lucene.
У меня были некоторые ошибки при попытке добавить поля в документ. Я не уверен почему. Ошибка говорит:
JavaError:,> Java stacktrace: java.lang.IllegalArgumentException: не имеет смысла иметь поле, которое не проиндексировано и не хранится в org.apache.lucene.document.Field.(Field.java:249)
в строке, где я положил: doc.add(поле ("содержимое", текст, t2))
Код Python, который я использовал:
def IndexerForUrl(start, number, domain):
lucene.initVM()
# join base dir and index dir
path = os.path.abspath("paths")
directory = SimpleFSDirectory(Paths.get(path)) # the index
analyzer = StandardAnalyzer()
writerConfig = IndexWriterConfig(analyzer)
writerConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE)
writer = IndexWriter(directory, writerConfig)
print "reading lines from sys.std..."
# hashtable dictionary
D = {}
D[start] = [start]
numVisited = 0
wordBool = False
n = start
queue = [start]
visited = set()
t1 = FieldType()
t1.setStored(True)
t1.setTokenized(False)
t2 = FieldType()
t2.setStored(False)
t2.setTokenized(True)
while numVisited < number and queue and not wordBool:
pg = queue.pop(0)
if pg not in visited:
visited.add(pg)
htmlwebpg = urllib2.urlopen(pg).read()
# robot exclusion standard
rp = robotparser.RobotFileParser()
rp.set_url(pg)
rp.read() # read robots.txt url and feeds to parser
soup = BeautifulSoup(htmlwebpg, 'html.parser')
for script in soup(["script","style"]):
script.extract()
text = soup.get_text()
lines = (line.strip() for line in text.splitlines())
chunks = (phrase.strip() for line in lines for phrase in line.split(" "))
text = '\n'.join(chunk for chunk in chunks if chunk)
print text
doc = Document()
doc.add(Field("urlpath", pg, t2))
if len(text)> 0:
doc.add(Field("contents", text, t2))
else:
print "warning: no content in %s " % pgv
writer.addDocument(doc)
numVisited = numVisited+1
linkset = set()
# add to list
for link in soup.findAll('a', attrs={'href':re.compile("^http://")}):
#links.append(link.get('href'))
if rp.can_fetch(link.get('href')):
linkset.add(link.get('href'))
D[pg] = linkset
queue.extend(D[pg] - visited)
writer.commit()
writer.close()
directory.close() #close the index
return writer
1 ответ
Если поле не проиндексировано и не сохранено, оно не будет представлено в индексе каким-либо образом, поэтому нет смысла его там видеть. Я предполагаю, что вы хотите индексировать FieldType t2. Для этого вам нужно установить IndexOptions, что-то вроде:
t2.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS)