Created
October 10, 2018 19:25
-
-
Save search5/dd1ada4b6ddf2e95b5b61751a533fd3d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-*- coding: utf-8 -*- | |
from __future__ import print_function | |
from __future__ import unicode_literals | |
from functools import partial | |
import codecs | |
import click | |
from xml.dom.minidom import parse | |
@click.command() | |
@click.argument('core') | |
def main(core): | |
solr_path = '/var/searchengine/solr-7.4.0/server/solr/{0}/conf/schema.xml' | |
tree = parse(solr_path.format(core)) | |
def line_break(tree, space_width, new_line_count=1): | |
break_str = "\n" * new_line_count | |
break_str = "{0}{1}".format(break_str, " " * space_width) | |
return tree.createTextNode(break_str) | |
def createElement(tree, field_name, **options): | |
node = tree.createElement(field_name) | |
for attr_name, attr_value in options.items(): | |
if attr_name.endswith("_"): | |
attr_name = attr_name[:-1] | |
node.setAttribute(attr_name, attr_value) | |
return node | |
break_node = partial(line_break, tree) | |
make_element = partial(createElement, tree) | |
# 마지막으로 정의된 fieldType 가져오기 | |
last_field_type = tree.getElementsByTagName("fieldType")[-1] | |
# 줄바꿈 태그 만들기 | |
# 새로운 필드 타입 생성 | |
alpha_num_tag = make_element('fieldType', name='alphaNumeric', | |
sortMissingLast='false', omitNorms='true', | |
class_='solr.TextField') | |
last_field_type.parentNode.insertBefore(alpha_num_tag, last_field_type.nextSibling) | |
last_field_type.parentNode.insertBefore(break_node(4, 2), last_field_type.nextSibling) | |
alpha_num_tag.appendChild(break_node(8)) | |
analyzer = tree.createElement('analyzer') | |
alpha_num_tag.appendChild(analyzer) | |
alpha_num_tag.appendChild(break_node(4)) | |
analyzer.appendChild(break_node(12)) | |
tokenizer = make_element('tokenizer', class_='solr.KeywordTokenizerFactory') | |
analyzer.appendChild(tokenizer) | |
analyzer.appendChild(break_node(12)) | |
filter_lower = make_element('filter', class_='solr.LowerCaseFilterFactory') | |
analyzer.appendChild(filter_lower) | |
analyzer.appendChild(break_node(12)) | |
filter_trim = make_element('filter', class_='solr.TrimFilterFactory') | |
analyzer.appendChild(filter_trim) | |
analyzer.appendChild(break_node(12)) | |
filter_pattern = make_element('filter', class_='solr.PatternReplaceFilterFactory', pattern="(\d+)", replacement="00000$1", replace='all') | |
analyzer.appendChild(filter_pattern) | |
analyzer.appendChild(break_node(12)) | |
filter_pattern = make_element('filter', class_='solr.PatternReplaceFilterFactory', pattern="0*([0-9]{6,})", replacement="$1", replace='all') | |
analyzer.appendChild(filter_pattern) | |
analyzer.appendChild(break_node(12)) | |
filter_pattern = make_element('filter', class_='solr.PatternReplaceFilterFactory', pattern="([^a-z0-9])", replacement="", replace='all') | |
analyzer.appendChild(filter_pattern) | |
analyzer.appendChild(break_node(8)) | |
# reg_no는 새로 추가한 fieldType으로 변경해야 함 | |
# <field indexed="true" name="reg_no" stored="true" type="string"/> | |
field_elements = tree.getElementsByTagName('field') | |
for element in field_elements: | |
if element.getAttribute('name') == 'reg_no': | |
element.setAttribute('type', 'alphaNumeric') | |
tree.writexml(codecs.open(solr_path.format(core), 'w', 'utf-8')) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment